Page 166 - AngularJS权威教程
P. 166

146  第 15 章  同外界通信:XHR 和服务器通信


                 Restangular返回的是增强过的promise对象,因此除了可以调用then方法,还可以调用一些特
             殊的方法,比如$object。$object会立即返回一个空数组(或对象),在服务器返回信息后,数
             组会被用新的数据填充。这对更新一个集合后,在作用域中立即重新拉取集合的场景很有用:

                 // 然后在promise中调用
                 messages.post(newMessage).then(function(newMsg){
                     // 首先将消息设置成空数组
                     // 然后一旦getList是完整的就填充它
                     $scope.messages = messages.getList().$object;
                 }, function(errorReason)
                     // 出现了一个错误
                 });
                 我们也可以从集合中移除一个对象。使用remove()方法可以发送一个DELETE HTTP请求给
             后端。通过调用集合中一个对象(或元素)的remove()方法来发送删除请求。

                 var message = messages.get(123);
                 message.remove(); // 发送DELETE HTTP请求
                 更新和储存对象是常见的操作。通常情况下,这种操作由HTTP PUT方法完成。Restangular
             通过put()方法来支持这个功能。

                 要更新一个对象,首先要查询这个对象,然后在实例中设置新的属性值,再调用对象的put()
             方法将更新保存到后端。

                     注意,在修改一个对象之前对其进行复制,然后对复制的对象进行修改和保存是一
                 个好做法。Restangular有自己的复制版本,因此无需对一系列方法重新进行绑定。在更
                 新对象时使用Restangular.copy()是一个比较好的实践。

                 现在我们已经了解了如何操作集合中的实例,下面详细介绍嵌套资源。嵌套资源是指包含在
             其他组件内部的组件。例如,一个特定作者所写过的所有书籍。
                 Restangular默认支持嵌套资源。事实上,我们可以从集合中查询出特定的嵌套资源实例。

                 var author = Restangular.one('authors', 'abc123');
                 // 构建一个GET到/authors/abc123/books的请求
                 var books = author.getList('books');
                 Restangular中另外一个酷炫的功能是不仅可以在one和all方法创造的对象上调用post、 put、
             getList等方法,也可以在服务器返回的对象上调用。例如,我们可以在代码中首先拉取一个作
             者并进行展示,然后获取他的书籍列表:
                 Restangular.one('authors', 'abc123').then(function(author) {
                     $scope.author = author;
                 });

                 // 然后在代码中将
                 // 构建一个GET到/authors/abc123/authors的请求
                 // 使用$scope.author,它是从服务器返回的真实对象
                 $scope.author.getList('books');

             15.17.1 我的HTTP方法们怎么办


                 Restangular支持所有的HTTP方法。它支持GET、PUT、POST、DELETE、HEAD、TRACE、
   161   162   163   164   165   166   167   168   169   170   171