Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 为资源编写拦截器的正确方法是什么?_Angularjs_Angularjs Resource - Fatal编程技术网

Angularjs 为资源编写拦截器的正确方法是什么?

Angularjs 为资源编写拦截器的正确方法是什么?,angularjs,angularjs-resource,Angularjs,Angularjs Resource,我需要在每次获取、保存和更新时转换服务的响应。我已经创建了一个资源并添加了一个执行的转换器,但是返回的对象的结构与我不使用transformer时的结构不同。在这里,我谈论的是响应的结构,而不是我正在转换的对象。 这是我的资源: angular.module('app') .factory('Insureds', ['$resource', 'config', function ($resource, config) { function transform(respon

我需要在每次获取、保存和更新时转换服务的响应。我已经创建了一个资源并添加了一个执行的转换器,但是返回的对象的结构与我不使用transformer时的结构不同。在这里,我谈论的是响应的结构,而不是我正在转换的对象。 这是我的资源:

angular.module('app')
   .factory('Insureds', ['$resource', 'config',  function ($resource, config) {

       function transform(response) {

           var insured = response.data.insured;


           return response;
       }

       var memberServicesHostName = config.memberServicesHostName;
       return $resource(memberServicesHostName + '/insureds/:insuredId', null,
       {
           'get': {
               method: 'GET', 'withCredentials': true, interceptor:
               {
                    response: function (response) { return transform(response).data; }
               }
           },
           'update': { method: 'PUT', 'withCredentials': true },
           'save': { method: 'POST', 'withCredentials': true }
       });
   }]);

当我不使用transformer保险时,当承诺得到解决时,它将作为保险对象的一个实例解决。但对于transformer,有一个包装器对象,它包含保险和responseStatus属性。这可能与我从拦截器中的响应返回的内容有关。像我这样的原始响应,或者response.data,或者response.resource.confered,应该返回什么?我很困惑…

默认响应拦截器如下所示:

function defaultResponseInterceptor(response) {
  return response.resource;
}
因此,如果要保留默认行为,必须返回response.resource而不是response.data:

希望这有帮助

return $resource(memberServicesHostName + '/insureds/:insuredId', null, {
  get: {
    method: 'GET',
    withCredentials: true,
    interceptor: {
      response: function (response) {
        return transform(response).resource;
      }
    }
  },
  ...