Подтвердить что ты не робот

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.

Где я могу узнать, как написать службу, которая обслуживает оба файла на моем контроллере?

4b9b3361

Ответ 1

Вы можете обновить службу, чтобы вернуть хеш ресурсов, а не один:

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 службу в сам контроллер, хорошо.

Ответ 2

Я предполагаю, что вы хотите выполнить некоторый код, когда оба файла загружены. Promises отлично работает для этого. Я не думаю, что ресурсы возвращают promises, но вы можете использовать службу $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
});