我创建了一个工厂服务,可以使用以下代码从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');
};
}]);
答案 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();
}]);