AngularJS:资源工厂和回调函数

AngularJS: Resource factory and callback function

您好,我是 Angular 的新手,我很难理解在工厂中使用 $resource 时如何处理数据。我正在尝试将工厂中的 $http 请求转移到 $resources。

首先我有(简化代码):

.factory('MetadataService', function($http) {
      $http({
            method: 'OPTIONS',
            url: 'http://myurl'
      }).success(function(data) {
         customized_data = do_some_complex_handling_on_data(data)
         callback(customized_data);
         });
});

当我尝试在我的工厂中使用 $resource 时,似乎我必须在我的控制器中调用 do_some_complex_handling_on_data() 方法:

.factory('MetadataService', function($resource) {
   return($resource('http://myurl', {}, {
        metadata: {method: 'OPTIONS'}
   }));
});

# controller:

var metadata = do_some_complex_handling_on_data(MetadataService.metadata());

因为我要在我的应用程序的不同部分的很多控制器中使用工厂(这就是我首先创建工厂的原因),我想让我的工厂 return我需要的数据。并且不必在 工厂 return 之后自定义数据

问题: 如何让我的工厂调用 do_some_complex_handling_on_data() 函数而不是控制器?

您可以使用 $http 服务提供的响应转换器。转换器用于在将 $http 的响应传递给最终客户端之前对其进行转换。

默认情况下有一个转换器寄存器将 json 字符串转换为 json 对象。您可以将自己的转换器附加到此集合,它将使用响应 json 对象调用。在你的转换器函数中,你可以调用任何你想要的函数来转换数据。

metadata: {
   method: 'OPTIONS'
   transformResponse: appendTransform($http.defaults.transformResponse,   
        function(value) {
            return do_some_complex_handling_on_data(value);
        })
}

function appendTransform(defaults, transform) {

  // We can't guarantee that the default transformation is an array
  defaults = angular.isArray(defaults) ? defaults : [defaults];

  // Append the new transformation to the defaults
  return defaults.concat(transform);
}

我从 docs here

中获取了这段代码

另请阅读 $http 服务中有关 "Default Transformations" 的文档