Построение сервиса "$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 2

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