我正在开发一个项目,其中包含一个模型,该模型根据所选环境从不同的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;
})
我想告诉工厂我正在处理哪个环境,所以我可以加载所需的数据文件。我怎样才能做到这一点?工厂是最好的解决方案吗?
谢谢
答案 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];
},
}
});