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 });