簡體   English   中英

angular.js $ resource作為具有動態root的“服務”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM