将AngularJS $resource
的所有操作作为$customAction
方法添加到资源中,以便我可以将它们作为资源实例上的方法调用,例如:
var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(user) {
user.abc = true;
user.$save();
});
$save
是save
操作,可以在user
实例上调用。
我现在定义了以下自定义操作,在$attributes
的每个实例上生成user
方法:
var User = $resource('/user/:userId', {userId:'@id'}, {
attributes: { method: 'GET', url: '/user/:userId/attributes', isArray: true }
});
如果我现在尝试调用此方法,则会收到错误Object #<Resource> has no method 'push'
:
User.get({userId:123}, function(user) {
var attrs = user.$attributes(); // error
// ...
});
我是否认为自定义操作的概念错误了?
答案 0 :(得分:1)
您似乎应该使用params而不是url
var User = $resource('/user/:userId/:customAction', {userId:'@id'}, {
attributes: { method: 'GET', params: { userId:'@id', customAction: 'attributes'}, isArray: true }
});
答案 1 :(得分:0)
我的最终解决方案是切换到Restangular。它使用链接语法支持嵌套资源,以便我可以执行以下操作:
Restangular.one("user", 123).all("attributes").get()