Page 161 - AngularJS权威教程
P. 161
15.12 $resource 服务 141
"moz-chunked-arraybuffer"(ArrayBuffer流)。 1
11. interceptor(对象)
拦截器属性有两个可选的方法:response或responseError。这些拦截器像普通的$http拦 2
截器一样,由$http请求对象调用。
3
15.12 $resource 服务
4
我们可以将$resource服务当作自定义服务的基础。创建自定义服务给了我们对应用进行高
度自定义的能力,可以对远程服务通信进行抽象,并且从控制器和视图中解耦出来。
5
最后,我们强烈建议在自定义的服务对象内部使用$resource。这不仅可以将加载远程服务
抽象成一个独立的AngularJS服务,同时将其从控制器中解耦,保证控制器的代码清洁。另外,
还使得我们可以不必关心控制器是如何取得数据的。 6
AngularJS对象内部的这种解耦方式同样对测试有益,因为我们可以将后端请求的结果进行
储存和模拟,而不用担心在测试时真的会将请求发送给后端。 7
要创建一个封装$resource的服务,需要将$resource的服务注入到我们用来封装的服务对
象中,并像平时一样调用其中的方法。 8
如下所示:
9
angular.module('myApp', ['ngResource'])
.factory('UserService', [
'$resource', function($resource) { 10
return $resource('/api/users/:id', {
id: '@'
}, { 11
update: {
method: 'PUT'
} 12
});
}]);
13
$resourceAPI
通过$resource()方法来使用$resource服务。这个方法可以接受三个参数。 14
url(字符串)
我们在这里传入一个包含所有参数的,用来定位资源的参数化URL字符串模板(参数以:符 15
号为前缀)。对URL中的每个参数,都可以通过它们的名字来为其赋值:
16
$resource('/api/users/:id.:format', {
format: 'json',
id: '123'
}); 17
这里需要注意,如果:之前的参数是空的(上面例子中的:id),那么URL中的这部分会被压
缩成一个.符号。 18