3

我想创建一个根据参数调用后端的服务。此代码不起作用,但我希望它显示我想要实现的目标:

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 返回一个项目,第二个选项通过用户 ID 返回多个项目。

然后我希望能够像这样调用该服务:

$scope.item = Item.get({id: id}, function() {...}

或者

$scope.items = Item.query({userid: userid}, function() {...}

实现这样的目标的最佳方法是什么?我是否需要为所有内容创建单独的服务?

谢谢!

4

2 回答 2

6

actions您可以使用自定义参数覆盖默认 URL :请参阅 $resource docs

我的意思是这样的:

$resource('/resource/item/:id/item.json', {}, {
    query: {
        url: '/resource/user/:userid/items.json',
        method: 'GET',
        isArray: true
    }
});

现在.get()和其他请求将使用默认 URL,而.query()应该使用自定义 URL。

请注意,该url属性是 Angular 1.2(现在是稳定版本)中的新属性。

于 2013-11-16T18:19:17.537 回答
0

也许改用查询字符串参数?

但是,您必须考虑下一个支持它或想要对其进行更新的人,无论是您还是其他人的未来。让它过于通用和复杂对任何人都没有帮助。它很快就会变得难以构建和维护。

您的实体是userand item,因此最佳做法是将它们视为您的应用可以使用的单独资源。

于 2013-04-10T10:34:34.300 回答