我有一个角常数,我需要配置后的配置阶段的应用程序。
它基本上是一个端点的集合,其中一些是在应用程序进行了几次检查之后最后确定的。
我目前正在做的是将其中一些作为函数返回,在其中我可以传递更改的部分:(示例代码,而不是生产代码)。
angular.module('...',[]).constant('URL',(function()
{
var apiRoot='.../api/'
return {
books:apiRoot+'books',//No env needed here - Property (good)
cars:function(env){//But needed here - Method (bad, inconsistent)
return env+apiRoot+'/cars';
}
};
}()));
但这是相当低效的,因为我只需要编译一次URL,而不是每次需要它。
URL.books
URL.cars('dev');
我正在考虑将它转换为一个角提供程序,并在实例化之前对其进行配置,但我不知道是否可以在配置块之外配置它,因为还没有env
,所以太早了。
我该怎么做呢?
发布于 2013-11-27 15:09:47
您可以对每个条目使用承诺 (书籍、汽车、.)。当你有汽车入口的所有信息(例如,env),你可以解决承诺。
angular.module('...',[]).constant('URL',(function()
{
var apiRoot='.../api/'
var carsPromise = function() {
var deferred = $q.defer();
getEnv().then(function(env) { // getEnv also returns a promise
deferred.resolve(env+apiRoot+'/cars');
});
return deferred.promise;
}
return {
books: instantlyResolvedPromise(apiRoot+'books'),
cars: carsPromise();
};
}()));
当然,这会增加一些复杂性,因为承诺会像疾病一样传播,但最终会得到一致的api。
https://stackoverflow.com/questions/20176044
复制相似问题