具有多个数据源的Angular工厂

时间:2015-05-19 08:43:46

标签: angularjs

我正在开发一个项目,其中包含一个模型,该模型根据所选环境从不同的json文件中获取数据。有一个data_dev.json,data_sit.json,data_prd.json ......你明白了。

目前我有这个工厂,要获取数据,只支持一个环境。

angular.module('app').factory('Routing',function ($http, $q) {
    return {
        index: function() {
            var defer = $q.defer();

            $http.get('data/routing_index_prod.json').success(function (data) {
                defer.resolve(data);
            }).error(function () {
                defer.reject('Could not find ial_routing_index.json');
            });

            return defer.promise;
        },
    }
});

然后在控制器中:

scope.environment = AppData.get('environment')
...
Routing.index().then(function (data) {
    scope.routingIndex = data;
})

我想告诉工厂我正在处理哪个环境,所以我可以加载所需的数据文件。我怎样才能做到这一点?工厂是最好的解决方案吗?

谢谢

2 个答案:

答案 0 :(得分:2)

只需将变量传递给索引函数:

angular.module('app').factory('Routing',function ($http, $q) {
    return {
        index: function(environment) {
            var defer = $q.defer();

            $http.get('data/' + environment + '.json').success(function (data) {
                defer.resolve(data);
            }).error(function () {
                defer.reject('Could not find ' + environment + '.json');
            });

            return defer.promise;
        },
    }
});

控制器:

scope.environment = AppData.get('environment')

Routing.index(scope.environment).then(function (data) {
    scope.routingIndex = data;
})

答案 1 :(得分:1)

您可以将网址和所有与环境相关的数据存储在一个单独的工厂中,您可以从中检索这些数据,具体取决于您AppData.get('environment')的{​​{1}}调用返回的环境。

    angular.module('app').factory('Routing', 'envSettings', function ($http, $q, envSettings) {
    return {
        index: function() {
            var defer = $q.defer();

            var env = AppData.get('environment');

            $http.get(envSettings.getSettings(env)).success(function (data) {
                defer.resolve(data);
            }).error(function () {
                defer.reject('Could not find ial_routing_index.json');
            });

            return defer.promise;
        },
    }
});

angular.module('app').factory('envSettings',function () {
    var settings = {
        "dev" : { 
            url: 'whatever.json'
        },
        "prd" : {
            url: 'data/routing_index_prod.json'
        }
    };
    return {
        getSettings: function(environment) {
            return settings[environment];
        },
    }
});