我想创建一个根据参数调用后端的服务。这段代码不起作用,但我希望它能说明我想要实现的目标:
myproject.factory('Item', function($resource) {
if (@id !== undefined)
return $resource('/resource/item/:id/item.json', {id: '@id'});
else if (@userid !== undefined)
return $resource('/resource/user/:userid/items.json', {userid: '@userid'});
});
基本上第一个选项只返回一个项目的id,第二个选项返回userid的几个项目。
我希望能够像这样调用该服务:
$scope.item = Item.get({id: id}, function() {...}
或
$scope.items = Item.query({userid: userid}, function() {...}
实现类似目标的最佳方式是什么?我是否需要为所有内容创建单独的服务?
谢谢!
答案 0 :(得分:6)
您可以使用自定义actions
参数覆盖默认网址:see $resource docs
我的意思是这样的:
$resource('/resource/item/:id/item.json', {}, {
query: {
url: '/resource/user/:userid/items.json',
method: 'GET',
isArray: true
}
});
现在.get()
和其他请求将使用默认网址,而.query()
应使用自定义网址。
请注意,url
属性是Angular 1.2中的新属性(现在是稳定版本)。
答案 1 :(得分:0)
也许使用查询字符串参数?
然而,您必须考虑下一个支持它的人,或者想要对其进行更新,无论是您或其他人的未来。使它过于通用和复杂并没有帮助任何人。很快就很难建立并维护。
您的实体是user
和item
,因此最佳做法是将它们视为您的应用可以使用的独立资源。