Angularjs:服务多个$资源url/数据源的服务?

我有一个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提供给同一个控制器。

我在哪里可以find如何编写一个将两个文件都提供给我的控制器的服务?

您可以更新服务来返回资源的散列,而不是一个:

 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服务进入控制器本身。

我假设你想在两个文件都加载时执行一些代码。 承诺工作真的很好。 我不认为资源承诺,但您可以使用$ 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 });