我正在使用angular构建单页面应用程序。我们使用持续集成与几个 Dev 和 QA 环境。这意味着每次我在不同的环境中部署应用程序时,我都需要为我的oauth服务器更新一些配置参数,例如SPA baseUrl,rest api url或url。
为实现这一目标,我们的CI引擎会在我们即将部署时为每个环境生成一个config.json文件,其中包含正确的参数。为此,我创建了一个非常简单的服务:
(function () {
'use strict';
angular
.module('app.core')
.factory('config', config);
config.$inject = ['$http'];
function config($http) {
return {
load: load
};
//////////
function load() {
return $http.get('assets/config/config.json');
}
}
}());
我的大部分服务都是在配置阶段期间通过提供商配置的。这就是问题出现的地方。如您所知,在此阶段无法注入服务,但我想使用 config 服务为我的提供商设置正确的URL和参数。
有没有正确的方法呢?
到目前为止,我唯一可以考虑的是将这些配置参数嵌入到我的模块创建文件中,以便它们可以随时使用。这似乎很难看,因为我不希望任何外部进程来修改我的源代码。
答案 0 :(得分:2)
如果这些是依赖于config.json的异步服务,那么完全可以改变它们的配置方式并使配置适合异步工作流,例如。
library(RcppRoll)
DT[, sales_rolling2 := c(sales[1L], roll_sum(sales, 2)), by = .(indx, item)]
否则,最好的选择是使用Gulp / Grunt / no将json配置构建到服务。
想想
app.factory('config', function ($http) {
return $http.get('config.json', { cache: true })
.then(function (response) {
return response.data;
});
});
app.factory('asyncService', function ($http, config) {
return config.then(function (config) {
return $http...
}).then(...);
});
从编译模板开始,而不是“我的应用程序修改源代码的外部流程”。
答案 1 :(得分:1)
我目前正在做的事情(但我是开放的更好的解决方案)是使用包含所有配置信息的json对象的单独配置文件。
文件内容示例:
var appConfigInfo = {
DEV: true,
API_PATH: 'your_custom_url'
// etc.
};
然后我在我的应用中将其添加为常量。例如:
angular
.module('app', [])
.constant('APP_CONFIG', appConfigInfo);
现在您可以通过常量访问所有配置值。不要忘记将它注入控制器等等。
我希望它有所帮助。