我的服务器上有一组环境变量,它们通过一个简单的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调用一次并将其设置为Constant吗?如果是这样,我将如何处理?
最佳答案
假设此变量是静态的,我将使service方法返回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})
关于javascript - 在Angular中将环境变量设置为常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38363132/