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、