[英]angular.js $resource as a 'service' with dynamic root
我有一個JS庫,我想提供給我的客戶,這是基於Angular。 它以下列方式定義了許多服務:
angular.module('Services', [
'ngResource'
]).factory('UserService', function($resource) {
return function(whatsonUserId) {
return $resource('/rest/user/:action');
}
}. factory ...
要使用我的圖書館,我的客戶只需:
app.controller('Ctrl', function(UserService) {
...
UserService().doSomething()
}
當我的客戶使用這個庫時,他們會在自己的HTML中使用它,這顯然是從他們自己的URL加載,使得根服務URL的根URL不正確。 顯然,糾正這種情況的方法是提供$ resource的絕對URL:
return $resource('www.my.server.url/rest/user/:action');
但我沒有一個'my.server.url' - 我有一些。 我有一個臨時環境,我有一個開發環境,我有生產環境 - 有些是每個客戶。
我的問題是:有沒有辦法可以擁有通用的“服務”,讓我的圖書館用戶為“服務”指定“服務器根”?
這是提供者api的一個很好的用例。 您可以使用module.provider
定義api。 為您的服務器配置定義提供程序,例如
module.provider('serverConfig',function() {
var serverUrl='val'; //default url
this.setServerUrl=function(url) {
serverUrl=url;
};
this.$get=[function(){
return {url:serverUrl};
}];
})
一旦定義了這樣的配置服務,就可以在每個自己的服務中使用它
factory('UserService', function($resource,serverConfig) {
return function(whatsonUserId) {
return $resource(serverConfig.url+'/rest/user/:action');
}
需要在配置階段配置提供程序
myApp.config(["serverConfigProvider", function(serverConfigProvider) {
serverConfigProvider.setServerUrl('serverUrlstring');
}]);
不知道早期版本。 但是從AngularJS 1.4.3開始,以下似乎有效:
.factory('UserService', function($resource) {
// subdomain is defaulted to www
return $resource("http://:subdomain.my.server.url/rest/user", {subdomain: 'www'});
})
然后用戶可以使用新的子域調用它:
UserService.query({subdomain: 'user001'}).$promise.then(
// => http://user001.my.server.url/rest/user
要么
UserService.query().$promise.then(
// => http://www.my.server.url/rest/user
它是靜態的還是動態的...無論如何你喜歡它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.