Page 158 - AngularJS权威教程
P. 158
138 第 15 章 同外界通信:XHR 和服务器通信
这三个方法可以在资源实例上被调用。如下所示:
// 使用实例方法$save()
User.get({id: '123'}, function(user) {
user.name = 'Ari';
user.$save(); // Save the user
});
// This is equivalent to the collection-level
// resource call
User.save({id: '123'}, {name: 'Ari'});
15.9.4 $resource实例是异步的
需要格外注意,这三个方法在调用时$resource对象会立即返回一个空的数据引用。由于所
有方法都是异步执行的,所以这个数据是一个空的引用,并不是真实的数据。
因此,虽然获取实例的调用看起来是同步的,但实际上不是。事实上,它只是数据的引用,
当数据从服务器返回后AngularJS会自动将数据填充进去。
// $scope.user将为空
$scope.user = User.get({id: '123'});
这些方法也提供了回调函数,在数据返回时按预期的方式调用:
User.get({id: '123'}, function(user) {
$scope.user = user;
});
15.9.5 附加属性
$resource集合和实例有两个特殊的属性用来同底层的数据定义进行交互。
$promise(promise)
$promise属性是为$resource生成的原始promise对象。这个属性是特别用来同$routeProvider.
when()在resolve时进行连接的。
如果请求成功了,资源实例或集合对象会随promise的resolve一起返回。如果请求失败了,
promise被resolve时会返回HTTP响应对象,其中没有resource属性。
$resolved(布尔型)
$resolved属性在服务器首次响应时会被设置为true(无论请求是否成功)。
15.10 自定义$resource 方法
尽管$resource服务提供了五种方法供我们使用,但它本身也具有良好扩展性,我们可以用
自定义方法对资源对象进行扩展。
为了在$resource对象中创建自定义方法,需要向包含修改过的$http设置对象的资源类传
入第三个参数,它被当作自定义方法。