Page 169 - AngularJS权威教程
P. 169
15.18 设置 Restangular 149
3. 设置responseInterceptors 1
Restangular可以设置响应拦截器。 responseInterceptors在需要对服务器返回的响应进行转
换时非常有用。例如,如果服务器返回的数据将我们需要的数据藏在了嵌套资源中,可以用 2
responseInterceptors把这些数据挖出来。
getList方法始终返回数组是非常重要的,如果响应中包含带有元信息和嵌套数 3
组的对象,我们应该用responseInterceptors把它解析出来。
4
responseInterceptors在每个响应从服务器返回时被调用。调用时会传入以下参数。
data:从服务器取回的数据。 5
operation:使用的HTTP方法。
what:所请求的数据模型。
url:请求的相对URL。 6
response:完整的服务器响应,包括响应头。
deferred:请求的promise对象。 7
例如,下面的设置会使getList()返回一个带有元信息的数组,在这种情况下,数组中的元
素就是同路由具有相同名称的属性的值。例如,向/customers发送GET请求会返回一个像 8
{customers: []}这样的数组。
angular.module('myApp', ['restangular']) 9
.config(function(RestangularProvider) {
RestangularProvider.setResponseInterceptor(function(data, operation, what) {
if (operation == 'getList') { 10
var list = data[what];
list.metadata = data.metadata;
return list;
} 11
return data;
});
}); 12
4. 使用requestInterceptors
Restangular同样还支持另外一种对应的操作:我们可以在将数据实际发送给服务器之前对其 13
进行操作。
14
如果要在将对象发送给服务器之前对其进行操作,那么requestInterceptors非常有用。例
如,我们可以直接用_id字段同MongoDB进行通信,所以在使用PUT操作将其发送回服务器之前
需要把这个字段移除。 15
小提示:我们可以同时使用requestInterceptors和responseInterceptors来实现全页面
范围内的加载提示。在每个请求之前开始加载提示,在收到请求后停止加载提示。 16
使用setRequestInterceptor()来设置requestInterceptor。这个方法可以接受下面四个
参数。 17
element: 发送给服务器的资源;
operation:所使用的HTTP方法; 18