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

Din*_*ine 3 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'});
});
Run Code Online (Sandbox Code Playgroud)

基本上第一个选项只返回一个项目的id,第二个选项返回userid的几个项目.

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

$scope.item = Item.get({id: id}, function() {...}
Run Code Online (Sandbox Code Playgroud)

要么

$scope.items = Item.query({userid: userid}, function() {...}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ada*_*dam 6

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

我的意思是这样的:

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

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

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