AngularJS:资源工厂和回调函数

时间:2015-07-08 08:18:02

标签: angularjs angular-resource

您是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);
         });
});

当我尝试在我的工厂中使用$资源时,似乎我必须在我的控制器中调用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());

由于我要在我的应用程序的不同部分使用很多控制器中的工厂(这就是我首先建造工厂的原因),我希望我的工厂可以根据需要返回数据。 工厂返回后,无需自定义数据

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

1 个答案:

答案 0 :(得分:1)

您可以使用$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服务

中有关“默认转换”的文档