将角度工厂拆分为多个文件

时间:2017-09-19 11:12:08

标签: angularjs

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

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.aparse.b,...分成每个文件只会导致循环依赖。

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

我更喜欢:

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

1 个答案:

答案 0 :(得分: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;
}]);