在这个片段中,来自 Angular 文档 关于 $resource
,函数的名称是user
的,在函数内部他们使用同名的变量。
var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
user.abc = true;
user.$save();
});
这有什么意义?围绕这一点的规则是什么?
当你调用User.get()
时,它会返回一个承诺,处理继续。当该承诺解析时,angular 会将您设置的变量(在本例中为 user
(设置为分辨率的值。它还调用成功回调函数,因此您可以在此时安全地更改它。
使用上面的例子,下面是发生的情况。
- 你调用 'User.get({userId:123}(
-
User.get
返回一个承诺并var user
该承诺 - 处理继续
- 承诺解决了,比方说
{id:123,name:"Imray"}
- Angular 将变量
user
设置为{id:123,name:"Imray"}
- Angular 调用您的成功回调,其中您:
- 将
user.abc
设置为true
,因此您的对象现在{id:123,name:"Imray",abc:true}
- 您调用
user.$save()
,这会将其保存到服务器等。
从本质上讲,它没有错,只是要注意执行顺序。
"user" 不是函数的名称,而是从给定资源读取的对象名称。
正确地说。用户成为代理,当http请求完成时,它充满了数据。
第二个参数 - 函数是在用户成功加载后调用的回调,因此用户成为完全创建的对象。
因此,当调用 .get 时,它的工作方式完全是这样的:
- 使用"代理"创建变量用户
- 从/user/123 读取用户
- 使用数据和"资源的方法"实现用户变量($save,$delete...
- 调用给定函数回调,其中:
- 在用户对象中设置 ABC
- 将其保存回资源($save将 POST 引入/user/123
在文档中,您可以阅读:https://docs.angularjs.org/api/ngResource/service/$resource -(零件使用/退货(
"重要的是要认识到调用$resource对象方法。 立即返回一个空引用(对象或数组取决于 isArray(。一旦数据从服务器返回,现有的 引用填充实际数据。这是一个有用的技巧 因为通常资源被分配给一个模型,然后 由视图呈现。具有空对象会导致不渲染, 一旦数据从服务器到达,就会填充对象 数据和视图会自动重新呈现自身,显示 新数据。这意味着在大多数情况下,人们永远不必编写 操作方法的回调函数。
"user"不必作为参数传递,因为在调用回调之前设置了 user。