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设置对象的资源类传
             入第三个参数,它被当作自定义方法。
   153   154   155   156   157   158   159   160   161   162   163