Angular $资源中的自定义实例方法

时间:2014-01-31 10:18:37

标签: javascript angularjs

将AngularJS $resource的所有操作作为$customAction方法添加到资源中,以便我可以将它们作为资源实例上的方法调用,例如:

var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(user) {
  user.abc = true;
  user.$save();
});

$savesave操作,可以在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
  // ...
});

我是否认为自定义操作的概念错误了?

2 个答案:

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