我正在处理的角度项目是向其添加配置文件。配置文件作为JSON加载,它包含将替换当前版本的项目中当前使用的静态字符串的字符串。有多个模块需要使用JSON的数据,在整个项目中使JSON文件全局化的最佳方法是什么?我正在考虑使用HTTP GET在每个模块中单独加载它,但我需要在其他所有模块之前加载JSON。
感谢。
答案 0 :(得分:0)
您可能可以使用服务。在作用域上定义一个对象,然后定义JSON。创建一个返回JSON的函数,并在需要的地方注入它。实施可能如下:
app.service("commonService", ["$log", function($log){
this.myConfiguration = {
id:"0",
name:"abc"
};
this.mystatic = function(){
return myConfiguration;
}
}
现在您可以将其注入并在控制器中使用:
app.controller("mycontroller", function($scope, commonService){
$scope.static = commonService.myStatic();
//other code here
});
答案 1 :(得分:0)
您可以使用value:
// create the module as usual
angular.module("myapp",[/*...*/]);
// on any other app point, set your json:
angular.module("myapp").value("myjson",{/*...*/});
答案 2 :(得分:0)
如果您在进行任何路由之前不需要,可以使用服务。这就是配置服务的样子:
(未测试的)
app.service('ConfigService', function ($q, $http) {
// loads the config file
this.loadConfig: function() {
var deferred = $q.defer();
if(angular.isDefined(this.config) && this.config.length){
deferred.resolve(this.config);
}
$http.get('config.json')
.success(function(response) {
this.config = response;
deferred.resolve(this.config);
})
.error(function(){
deferred.reject('Could not load "config.json" file');
});
return deferred.promise;
};
// returns a config setting
this.get: function(key){
// if the config is not loaded yet, load it and call self
if(!angular.isDefined(this.config) || !this.config.length){
this.loadConfig().then(function(){
return this.get(key);
})
}
// config is loaded. Return requested key
if(angular.isDefined(config[key])){
return config[key];
}else{
console.error( 'Could not load config value: ' + key );
return false;
}
};
});