【问题标题】:AngularJS: Resource factory and callback functionAngularJS:资源工厂和回调函数
【发布时间】:2015-07-08 08:18:02
【问题描述】:

您好,刚接触 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());

由于我将在我的应用程序的不同部分的许多控制器中使用工厂(这就是我首先制作工厂的原因),我希望我的工厂在需要时返回数据。并且不必在工厂返回它之后自定义数据

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

【问题讨论】:

    标签: angularjs angular-resource


    【解决方案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 服务中有关“默认转换”的文档

    【讨论】:

    • 这对我来说确实是正确的解决方案,tnx。作为角度和概念的新手,我浏览了 transformResponse 选项而没有看到它们的可用性;)我现在在使用 transformResponse 时在 API 上设置的身份验证遇到了一些问题,但我会设法解决这个问题。 Tnx
    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2023-03-26
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多