2014-01-31 135 views
1

了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 
    // ... 
}); 

我是否得到自定義操作的概念錯誤?

回答

0

對我來說,最終的解決辦法是切換到Restangular。它支持使用鏈接語法的嵌套資源,以便我可以:

Restangular.one("user", 123).all("attributes").get()

1

看來,你應該使用PARAMS而不是網址

var User = $resource('/user/:userId/:customAction', {userId:'@id'}, { 
    attributes: { method: 'GET', params: { userId:'@id', customAction: 'attributes'}, isArray: true } 
});