2

我创建了一个工厂服务,可以使用以下代码从 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 “调用”分离到附加到服务的函数中?就像下面的$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');
    };
}]);
4

2 回答 2

4

编辑以反映您的需求。虽然没有尝试过运行它。

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
    });
};
于 2014-07-24T10:41:37.223 回答
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();
}]);
于 2014-07-24T11:09:14.610 回答