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 に答える