【问题标题】:Split angular factory into multiple files将角度工厂拆分为多个文件
【发布时间】:2017-09-19 11:12:08
【问题描述】:

我有一个像这样的角度工厂:

myApp.factory('parse', [function () {
  var parse = {};
  parse.a = {};
  parse.a.x = function () { /* ..., call parse.b.x */ };
  parse.a.y = function () { /* ... */ };
  parse.b = {};
  parse.b.x = function () { /* ..., call parse.a.y */ };
  /* ... */
  return parse;
}]);

通过向parse 添加更多属性,文件变得越来越大。 (目前大约2K行)所以也许是时候拆分成多个文件了。

这里的一个问题是这些函数有一些依赖关系。简单地将parse.a, parse.b, ... 拆分到每个文件中只会导致循环依赖。

如何将此文件拆分为多个?

我更喜欢:

  • 最好保留当前界面(或一些镜像修改)
  • 按语义按文件分组函数,而不是依赖项(例如,一个文件中的所有 parse.a.*
  • 文件不要太多(每个函数一个文件)

【问题讨论】:

  • 好吧,如果您的功能彼此如此紧密,拆分它将需要您重新设计您的工厂以采用模块化方法工作。例如,创建具有较小职责的较小组件。现在的方式,如果没有丑陋的解决方法,您将无法拆分它。另外,您的解析器解析是什么?它是否遵循解析架构?

标签: angularjs


【解决方案1】:

实际上,这取决于您如何构建项目 - 每个/某些构建工具都有自己的方法来处理此类情况。

只要有角度,你就可以使用 $injector 来避免循环依赖——这通常不是很酷,但让你做任何事,即:

myApp.factory('parseA', ['$injector', function ($injector) {
  var parseA = {};
  /* can not access parseB here*/
  parseA.x = function () { 
    /* can access parseB here */
    return $injector.get('parseB').x(); 
  };
  parseA.y = function () { /* ... */ };
  /* ... */
  return parse;
}]);

myApp.factory('parseB', ['$injector', function ($injector) {
  var parse = {};
  parse.b.x = function () { return $injector.get('parseA').y() };
  /* ... */
  return parse;
}]);

【讨论】:

  • 我猜在正常情况下差异是可以忽略的。
猜你喜欢
  • 2020-12-04
  • 2020-07-29
  • 2016-03-27
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多