我有一个Angular服务/提供程序,它为我的控制器提供json数据,效果很好:
angular.module('myApp.services', ['ngResource']).
factory("statesProvider", function($resource){
return $resource('../data/states.json', {}, {
query: {method: 'GET', params: {}, isArray: false}
});
});
但是我还需要将json数据从另一个文件counties.json
提供给同一个控制器。
我在哪里可以找到如何编写为我的控制器提供这两个文件的服务?
答案 0 :(得分:94)
您可以更新服务以返回资源的哈希值,而不是单个哈希值:
angular.module('myApp.services', ['ngResource']).
factory("geoProvider", function($resource) {
return {
states: $resource('../data/states.json', {}, {
query: { method: 'GET', params: {}, isArray: false }
}),
countries: $resource('../data/countries.json', {}, {
query: { method: 'GET', params: {}, isArray: false }
})
};
});
您可以使用它在功能名称末尾添加.query()
,即geoProvider.states.query()
和geoProvider.countries.query()
和myApp.services
必须注入您的控制器,然后注入geoProvider
也为控制器本身提供服务。
答案 1 :(得分:9)
我假设你想在两个文件加载时执行一些代码。承诺对此非常有效。我认为资源不会返回承诺,但您可以使用$ http服务进行简单的ajax调用。
这里我为两个数据文件分别定义了一个服务,第三个服务返回了在两个文件加载完成后得到满足的承诺。
factory('states',function($http) {
return $http.get('../data/states.json');
}).
factory('countries',function($http) {
return $http.get('../data/countries.json');
}).
factory('statesAndCountries', function($q, states, countries) {
return $q.all([states, countries]);
});
然后在你的控制器中:
statesAndCountries.then(function(data) {
var stateData = data[0];
var countryData = data[1];
// do stuff with stateData and countryData here
});