在全球范围内将JSON加载到AngularJS项目中

时间:2015-10-26 18:44:55

标签: javascript json angularjs

我正在处理的角度项目是向其添加配置文件。配置文件作为JSON加载,它包含将替换当前版本的项目中当前使用的静态字符串的字符串。有多个模块需要使用JSON的数据,在整个项目中使JSON文件全局化的最佳方法是什么?我正在考虑使用HTTP GET在每个模块中单独加载它,但我需要在其他所有模块之前加载JSON。

感谢。

3 个答案:

答案 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;
        }
    };

});