Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建使用$resource(取决于参数)返回数据的服务_Javascript_Angularjs - Fatal编程技术网

Javascript 如何创建使用$resource(取决于参数)返回数据的服务

Javascript 如何创建使用$resource(取决于参数)返回数据的服务,javascript,angularjs,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

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

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() {...}
$resource('/resource/item/:id/item.json', {}, {
    query: {
        url: '/resource/user/:userid/items.json',
        method: 'GET',
        isArray: true
    }
});

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


谢谢

是否可以改用查询字符串参数

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


您的实体是
用户
项目
,因此最佳做法是将它们视为应用程序可以使用的单独资源。

您可以使用自定义
操作
参数覆盖默认URL:

我的意思是这样的:

$scope.item = Item.get({id: id}, function() {...}
$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(现在是稳定版本)中是新的。

感谢您的回复。那么,您建议如何为一个用户查找所有项目?我需要创建一个服务“itemsbyser”吗?我建议用户有项目,所以你的URL应该是这样的:
/resource/user/:userId/items/
,如果你想要一个特定的项目,你可以有
/resource/user/:userId/items/:itemId
。是的,这就是我目前的做法。为了完成这两种不同的情况,我有两种不同的服务(一种称为“Items”,它接受itemid,另一种称为“itemsbyser”它接受用户ID并返回用户项。这两个服务调用资源路径的方式与您建议的类似。这很好,但是我认为可能有一种方法可以将这两个服务组合到一个服务中。如果我必须继续为我需要调用的每个路径创建一个新服务,那么最终将有很多服务…您应该uldn不需要为每个路径创建新服务,只需在服务器上为
itemId
处理null。如果
itemId
为null,则将所有用户的项目发送到客户端。如果存在
itemId
,则将单个项目返回到客户端