2013-04-12 88 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