建立一个“资源”'多个API调用的服务

时间:2014-07-24 10:33:50

标签: angularjs angularjs-service angularjs-resource angularjs-http

我创建了一个工厂服务,可以使用以下代码从API获取数据。

app.factory('Book', ['$resource','$http', function($resource, $http) {
    return $resource('http://someurl.com/api/book/', {}, {
      query: {method:'GET', isArray:false}
    });
  }]);

上面的代码适用于获取数据,但我希望能够解析一个服务,然后可以访问所有不同的api调用。以下是使用 $ http 服务构建它的理论方法,但我无法使其工作。我还想拥有 $ resource 的功能。我所希望的是有人给我一些语法指针如何分隔每个 $ resource " call"进入附加服务的功能?与下面的 $ 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 个答案:

答案 0 :(得分:4)

编辑以反映您的需求。但是Haven没试过它。

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

答案 1 :(得分:2)

Goodzilla上面的解决方案有效 - 但我最终使用了Gustav

的解决方案
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();
}]);