如何根据参数创建使用$ resource返回数据的服务

时间:2013-04-10 09:39:06

标签: javascript angularjs

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

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() {...}

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

谢谢!

2 个答案:

答案 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)

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

然而,您必须考虑下一个支持它的人,或者想要对其进行更新,无论是您或其他人的未来。使它过于通用和复杂并没有帮助任何人。很快就很难建立并维护。

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