我的服务器上有一组环境变量,我通过一个简单的API调用来获取:
angular.module('app')
.factory('serverService', ['$resource',
function($resource) {
var base = '/api/server/';
return $resource(base, {}, {
getConfiguration: {method: 'GET', url: base + 'configuration'}
});
}]);
我在几个控制器中调用它:
var getConfiguration = function() {
serverService.getConfiguration().$promise.then(function(config) {
vm.config = config;
});
};
我现在需要访问其他一个工厂中的环境变量。我知道我可以注入serverService
并在该工厂内再次打电话,但这似乎是一个糟糕的选择。
由于我的配置永远不会改变(配置仅因环境[dev,staging,prod]而不同),当我的应用加载并将结果对象设置为常量时,我应该进行一次API调用吗?如果是这样,我将如何解决这个问题?
答案 0 :(得分:0)
假设此变量是静态的,我将使服务方法返回promise,而不是执行新查询。服务是单身,所以它应该只进行一次查询。在这一点上,我将serverService重命名为更合适的东西,比如ConfigurationService,它会感觉到"感觉"最好随处注入。
angular.module('app')
.factory('serverService', ['$http',
function($resource) {
var base = '/api/server/';
//Get data and peel off http request data
var configPromise = $http.get(base + 'configuration').then(function(response){return response.data});
return {
getConfiguration: function(){
return configPromise
}
};
}
}]);
-
var getConfiguration = function() {
serverService.getConfiguration().then(function(config) {
vm.config = config;
});
};
选项2:
如果您可以访问常量服务器端并在生命周期中将其注入,则可以使用app.constant
。这是一个更好的解决方案,因为在您的应用程序引导程序中引入另一个AJAX调用只会减慢页面加载速度。这种往返旅行"引导周期真的可以开始加起来。
app.constant('config', ${configVar})