javascript - 通用工厂/服务以避免 Angular 中的重复代码

标签 javascript angularjs duplicates refactoring factory

所以我有一组看起来很相似的工厂。我可能想创建一个通用函数来减少重复代码。

代码示例:

.factory('neQueryService', function ($http, $resource, constants) {
return $resource(constants.GEODATA_QUERY, {},
  {
    get: {
      method: 'GET',
      transformResponse: function(data, headers, status){
        var response = {};
        response.data = data;
        response.headers = headers();
        response.status = status;
        return response;
      }
    }
  }
);

.factory('neTaskService', function ($http, $resource, constants) {
return $resource(constants.GEODATA_TASK, {},
  {
    get: {
      method: 'GET',
      transformResponse: function(data, headers, status){
        var response = {};
        response.data = data;
        response.headers = headers();
        response.status = status;
        return response;
      }
    }
  }
);

如您所见,从“获取”到“返回”的所有内容在工厂中都是相同的。是否有一种聪明的“最佳实践”方法可以将该部分放入一个单独的函数中,并在所有工厂中仅引用它?

最佳答案

您可以为此使用 value() 提供程序,因为它没有任何外部依赖项:

.value('resourceConfig', {
    get: {
      method: 'GET',
      transformResponse: function(data, headers, status){
        var response = {};
        response.data = data;
        response.headers = headers();
        response.status = status;
        return response;
      }
    }
});

.factory('neQueryService', function ($http, $resource, constants, resourceConfig) {
    return $resource(constants.GEODATA_QUERY, {}, resourceConfig);
});

.factory('neTaskService', function ($http, $resource, constants, resourceConfig) {
    return $resource(constants.GEODATA_TASK, {}, resourceConfig);
});

或者您可以更进一步,分解出一个工厂来创建您的资源:

.factory('prepareResource', function ($resource) {
    return function (query) {
        return $resource(query, {}, {
            get: {
                method: 'GET',
                transformResponse: function(data, headers, status){
                    var response = {};
                    response.data = data;
                    response.headers = headers();
                    response.status = status;
                    return response;
                }
           }
       });
   };
});

.factory('neQueryService', function (prepareResource, constants) {
    return prepareResource(constants.GEODATA_QUERY);
});

.factory('neTaskService', function (prepareResource, constants) {
    return prepareResource(constants.GEODATA_TASK);
});

关于javascript - 通用工厂/服务以避免 Angular 中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41873765/

相关文章:

c++ - 导出两个命名空间中的重复函数 (C++)

javascript html 高度与窗口高度

javascript - 从 Angular DataFactory 中的 HTTP POST 请求接收未定义的结果

javascript - 通过 highcharts-ng 指令将使用 highcharts 的图表添加到 Angular

javascript - 链接 Promise 错误处理程序

r - 定位并合并 data.frame 中的重复行但忽略列顺序

ios - 在 NSMutableArray 中搜索对象并删除冗余值的最有效方法

javascript - 当 .load() 准备就绪时触发事件

javascript - 如何监听 AngularJS 组件中的事件?

javascript - ios风格在phonegap中滑动删除动画