我正在编写一个包含两个.value配方的配置模块:
我目前将它们设置为.value,但它们可以很容易地成为.constant
由于我希望能够在不必重写所有API网址的情况下更改baseURL,我需要引用我刚刚定义的baseURL - 在同一个模块中:
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 .value定义为:
getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/',
//or
getMyDataLink1 : baseURL + 'rest/folder1/action1/api_key/',
但是其中任何一个都会出现“Uncaught ReferenceError:XXXX未定义”错误...
是否可以从同一模块中的另一个.value引用.value?
编辑: 见http://jsfiddle.net/goredwards/yy5xuodh/
EDIT2:见http://jsfiddle.net/goredwards/xvj5xcgz/我将第二个.value转换为.factory - 然后与小提琴底部的js-only方法进行比较 - 必须有一个比这更简洁的方法! ?
答案 0 :(得分:0)
您是否尝试过将Config注入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/',
});
答案 1 :(得分: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;
}
}}]);
答案 2 :(得分:0)
正如Gaurav所指出的那样,似乎不可能在.value配方中注入任何东西,所以我发现最简洁最清晰的方法(从可维护性的角度来看)是转换连接的.value配方(即第二个)进入.factory食谱并注入“配置”。 .value变量:
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 ......