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
   164   165   166   167   168   169   170   171   172   173   174