2013-04-12 138 views
1

angular documentation for $resource有下面的例子:

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

我一直在谷歌上搜索和閱讀documenation和無法弄清楚如何@id被填充的。 $resources中沒有一個部分可以解釋這一點。它一定是我沒有遇到過的文檔中的其他地方。任何人都可以幫助我指出正確的方向嗎?

+0

如果參數值的前綴是@,那麼該參數的值是從數據對象中提取的(對於非GET操作很有用)。 – rajkamal

回答

6

在url /user/:userId中,userId部分是佔位符。您告訴AngularJS將其替換爲實際的用戶標識以獲取真實的URL。

在第二部分中,如果您編寫{userId : '@id'},您告訴AngularJS,如果未指定userId,則應使用該對象的id屬性。

我會嘗試用幾個例子來說明:

如果你

var user = User.get({userId : 123}); 

您已明確指定一個值userId所以角將用它來創建URL /user/123/。但是,如果你做

var user = User(); 
user.id = 123; 
user.get() 

在這種情況下,你沒有明確指定的userId的值,所以角將使用user.id的價值userId,並重新創建網址/user/123/

與rajkamal提及類似,這對於非GET操作非常有用。一個真實的用例就是你這樣做的地方:

// user wants to work with Post 10. So we fetch that 
var post = Post.get({postId : 10}); 

// user works with it, makes some changes 
post.body = 'New body'; 
post.topic = 'New topic'; 

// user is done, and wants to save. You make a POST call 
// without having to specify it's id again 
post.save(); 
+0

因此,如果我使用服務,如下所示:https://github.com/angular/angular-phonecat/blob/master/app/js/services.js我將如何發送參數到服務方法? – Webnet

+0

您可以將其作爲第二個參數傳遞,完全如何在上述示例中獲取帖子。當你提取電話/郵件時,你會知道對象的id是什麼,所以你把它作爲參數傳入。對於後續的非GET調用,您不需要將其傳入。 – xbonez