1

角度文档$resource具有以下示例:

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

我一直在谷歌搜索和阅读文档,但无法弄清楚是如何@id填充的。$resources里面似乎没有一节可以解释这一点。它一定是我没有遇到过的文档中的其他地方。谁能帮我指出正确的方向?

4

1 回答 1

6

在 url/user/:userId中,该userId部分是占位符。您是在告诉 AngularJS 将其替换为实际的用户 id 以获取真实的 url。

在您编写的第二部分中,{userId : '@id'}您告诉 AngularJS,如果userId未指定 a,它应该使用id对象中的属性。

我将尝试用几个例子来说明:

如果你这样做

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

您已经明确指定了一个值,userId因此 Angular 将使用它来创建 url /user/123/。但是,如果你这样做

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

在这种情况下,您没有明确指定 的值userId,因此 Angular 将使用user.idfor的值userId,并再次创建 url /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();
于 2013-04-12T17:45:18.403 回答