重用多个模块的指令

时间:2014-11-04 03:33:41

标签: javascript angularjs angularjs-directive

我想知道为多个模块重用相同指令的最佳方法是什么。在我看来,我认为指令就像DOM模块,所以这个角度的架构对我的观点有点烦人。

我现在的做法是:

var mainapp = angular.module('MainApp');
mainapp.controller( ... );

var otherapp = angular.module('OtherApp');
otherapp.controller( ... );

在其他文件中,我有我的指令,我想在这两个控制器/模块中使用

mainapp.directive('autoselect', function(){ ... });

但正如您所看到的,我必须指定我必须使用它的应用程序。如果我想在两者中使用,我是否必须复制两次相同的代码?

2 个答案:

答案 0 :(得分:6)

您可以维护一个包含公共(服务,指令,值,常量等)的模块并注入每个模块。

angular.module('CommonApp',['OtherCommonModule1','OtherCommonModule2']).directive(..);

var mainapp = angular.module('MainApp', ['CommonApp']);
mainapp.controller( ... );

var otherapp = angular.module('OtherApp', ['CommonApp']);
otherapp.controller( ... );

答案 1 :(得分:4)

不,您不必指定使用指令所需的应用程序/模块。

让我解释一下:

  1. 在angularJS中,一切都是模块。例如,MainApp,OtherApp甚至autoselect指令都是一个模块。
  2. 每个模块都可以“依赖”一个或多个模块。
  3. 所以,这就是我设计解决方案的方法:

    angular.module('com.example.mydirective', [])
      .directive('autoselect', function() { ... });
    
    angular.module('MainApp', ['com.example.mydirective']);
      .controller(...);
    
    angular.module('OtherApp', ['com.example.mydirective']);
      .controller(...);
    

    我想补充一点:表示依赖的方括号具有特殊意义。

    angular.module('module-name', []); // this line tells angularJS to create a new module
    
    angular.module('module-name'); // no brackets -- this asks angularjs to return a pre-existing module
    

    希望这有帮助