1

我正在寫包括兩個.value的食譜配置模塊相同的模塊中定義的值:angularjs - 如何引用

  • 基本URL
  • 一些REST API網址的哪去上的基本URL頂部

我目前設置這些爲.value的,但他們可以很容易被.constant

因爲我希望能夠改變基本URL,而不必重寫所有API網址我需要引用我剛剛定義的基本URL - 在同一個模塊:

var configuration = angular.module('configuration', []); 

configuration.value('Config',{ 
    baseURL : 'http://dev.mysite.com/',  // define Base URL 
}); 

configuration.value('ApiList', { 
    getMyDataLink1 : this.baseURL + 'rest/folder1/action1/api_key/', 
    getMyDataLink2 : this.baseURL + 'rest/folder2/action2/api_key/', 
    getMyDataLink3 : this.baseURL + 'rest/folder3/action3/api_key/', 
}); 

當我測試的變量:正確

  • Config.baseURL輸出爲http://dev.mysite.com/
  • ApiList.getMyDataLink1只有一半定義爲this.baseURL部分未定義(即輸出爲undefinedrest/folder1/action1/api_key/

我也試着定義ApiList。價值爲:

getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/', 
//or 
getMyDataLink1 : baseURL + 'rest/folder1/action1/api_key/', 

但無論是那些得到「未捕獲的ReferenceError:未定義XXXX」的錯誤...

是否有可能引用。來自另一個.value的值在同一個模塊中?

編輯: 看到http://jsfiddle.net/goredwards/yy5xuodh/

EDIT2:看http://jsfiddle.net/goredwards/xvj5xcgz/在那裏我已經轉換的第二.value的一個.factory - 然後比較在小提琴的底部只有JS-方法 - 必須有一個比這更簡潔的方式!?

回答

0

爲拉夫指出,它似乎並不可能注入任何東西到.value的配方,以便在最短和最清晰的方式(從維護的角度看)我發現的是到串接轉換.value的配方(即:第二個)成.factory配方和注入「配置」。價值變量:

var configuration = angular.module('configuration', []); 

configuration.value('Config',{ 
    baseURL : 'http://dev.mysite.com/',  // define Base URL 
}); 

configuration.factory('ApiList', ['Config', function(Config){ 
    return{ 
     getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/', 
     getMyDataLink2 : Config.baseURL + 'rest/folder2/action2/api_key/', 
     getMyDataLink3 : Config.baseURL + 'rest/folder3/action3/api_key/' 
    }; 
}]); 

,而這工作(見http://jsfiddle.net/goredwards/xvj5xcgz/),並且是相對簡潔&清楚,它似乎奇怪的是.values不能簡單地連接到其他.values ..

0

你有沒有嘗試過將配置注入ApiList?

 configuration.value('ApiList', function(Config) { 
      getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/', 
      getMyDataLink2 : Config.baseURL + 'rest/folder2/action2/api_key/', 
      getMyDataLink3 : Config.baseURL + 'rest/folder3/action3/api_key/', 
     }); 
+0

謝謝,但這似乎不工作 - 請參閱我剛剛添加的jsfiddle - 鏈接是爲原始代碼,但是當我添加您的更改它打破了'配置'模塊 – goredwards 2014-12-05 00:02:23

0

據我所知,你不能注入一個值依賴到另一個值。您可以使用服務或工廠來構建您的API網址。事情是這樣的:

configuration.value('Config',{ 
    baseURL : 'http://dev.mysite.com/',  // define Base URL 
}); 

configuration.value('ApiList', { 
    getMyDataLink1 : 'rest/folder1/action1/api_key/', 
    getMyDataLink2 : 'rest/folder2/action2/api_key/', 
    getMyDataLink3 : 'rest/folder3/action3/api_key/', 
}); 

app.service('URLService', ['Config', 'ApiList', function(Config, ApiList){ 
    return { 
    getURLs : function() { 
     var url = Config.baseURL+ApiList.getMyDataLink1; 
     return url; 
    } 
}}]); 
+0

謝謝高拉夫 - 我實際上只是試圖將第二個.value配方轉換爲工廠 - 參見http:// jsfiddle。net/goredwards/xvj5xcgz/- 與pure_js方法相比,它似乎相當冗長,只需將其連接到現有的聲明變量 – goredwards 2014-12-05 00:53:52