Построение сервиса "$resource " для нескольких вызовов API
Я создал заводскую службу, которая может получать данные из API со следующим кодом.
app.factory('Book', ['$resource','$http', function($resource, $http) {
return $resource('http://someurl.com/api/book/', {}, {
query: {method:'GET', isArray:false}
});
}]);
Приведенный выше код работает для извлечения данных, но я хотел бы иметь один сервис, который я могу анализировать, а затем иметь доступ ко всем различным вызовам api. Ниже приведен теоретический способ построить его с помощью $http служба, но я не могу заставить это работать. И я также хотел бы иметь функциональность $ресурс. На что я надеялся, так это на то, что ... кто-то, чтобы дать мне указатели с синтаксисом, как я могу отделить друг от друга $ресурс "вызов" в функцию, присоединенную к сервису? Как покончено с этим $http обслуживание внизу.
app.service('dataService', ['$resource','$http', function($resource, $http) {
var urlBase = 'http://someurl.com/api/';
this.getBooks = function () {
return $http.get(urlBase + 'book')
};
this.getArticles = function () {
return $http.get(urlBase + 'articles');
};
}]);
2 ответа:
Отредактировано с учетом ваших потребностей. Хотя я не пробовал его запустить.
app.factory('DataService', ['$resource', function($resource) { return $resource('http://someurl.com/api/:path', { path: '@path' }, { getBook: { method: 'GET', params: { path: 'book' } } }, { getArticles: { method: 'GET', params: { path: 'articles' }, isArray: true } }); } ])
Затем в вашем контроллере просто вызовите службу ресурсов с правильным путем:
this.getBook = function() { $scope.book = DataService.getBook({}, function success() { //your code }, function err() { //your code }); }; this.getArticles = function() { $scope.articles = DataService.getArticles({}, function success() { //your code }, function err() { //your code }); };
Решение выше по Гудзилла сработало - но я в конечном итоге использовал решение по Густав
app.service('dataService', ['$resource', function($resource) { var urlBase = 'http://someurl.com/api/'; this.getBooks = function () { return $resource(urlBase + 'Books').get(); }; this.getArticles = function () { return $resource(urlBase + 'Articles').get(); }; }]);
И контроллер
app.controller('MyCtrl', ['$scope', 'dataService', function($scope, DataService) { $scope.logBook = DataService.getBooks(); }]);