Page 171 - AngularJS权威教程
P. 171
15.18 设置 Restangular 151
布尔型 1
如果参数值为true,所有的资源都会被当作孤立资源处理,没有任何URL会进行嵌套。
数组 2
只有定义在这个数组中的资源会当作孤立资源处理,数组的元素是字符串,字符串的值是资
源的标识。 3
8. 使用超媒体
4
在实践中,只通过一个切入点(主URL)来同后端服务器进行通信是非常好的做法,其他数
据模型通过链接来指向相关联的资源。
5
Restangular通过selfLink、oneUrl和allUrl来支持这个有用的做法。
首先要设置selfLink字段。同设置ID非常类似,selfLink将路径设置为数据模型的一个属
6
性,而数据模型通过链接同对应的资源相关联。这样我们可以知道应该将PUT或GET请求发送到哪
个URL。
7
angular.module('myApp', ['restangular'])
.config(function(RestangularProvider) {
RestangularProvider.setRestangularFields({ 8
selfLink: 'link.href'
});
});
9
设置好后,就可以开始使用这个非常有用的功能了。
首先读取所有作者的列表,这也是应用的主路由。 10
$scope.authors = Restangular.all('authors').getList().$object;
基于前面的设置,每一个作者都对应一个指向自己的链接,同样还有一个指向该作者对应的 11
书籍的URL。可以像下面这样使用这些属性:
12
var firstAuthor = authors[0];
firstAuthor.name="John";
// PUT到/authors/1988-author-1 13
// url在firstAuthor.link.href中
firstAuthor.put();
14
// GET到/books/for-author/1988-author-1
var books = Restangular.allUrl('books', firstAuthor.books.href)
.getList().$object;
15
9. 自定义Restangular服务
最后,强烈建议将Restangular封装在一个自定义服务对象内。这样做非常有用,因为在每个 16
自定义服务中都可以对Restangular进行独立的设置。通过使用服务可以将同服务器通信的逻辑与
AngularJS对象解耦,并让服务直接处理通信的业务。
17
AngularJS对象内部的解耦同样对测试非常有帮助,因为我们在测试时模拟后端请求的返回
数据,而无需担心会真的向后端发送请求。
18