使用模块模式或对象来定义Angular组件有什么优势吗?

时间:2013-10-13 11:26:24

标签: javascript angularjs

我想知道是否值得以这种方式写角度的东西:

(function(angular, module) {

  'use strict';

  module.controller('MyCtrl', function($scope) {
    // possibly use helperFunction here
  });

  function helperFunction() {
    ...
  }

})(angular, angular.module('myModule'));

或这种方式(使用App对象并将app内容放入其中:

App = App || {};

App.myModule = App.myModule || angular.module('myModule', []);

App.myModule.controller('MyCtrl', function($scope) {

  'use strict'

  // possibly use helperFunction here

  function helperFunction() {
    ...
  }

});

比使用这样的常规方式

angular.module('myModule').controller('MyCtrl', function($scope) {

  'use strict'

  // possibly use helperFunction here

  function helperFunction() {
    ...
  }

});

这是我想到的构建应用程序代码的三种可能方式(不包括requirejs)。我在大多数地方都使用“常规”(最后一个),但我想知道使用这两种前方法是否有任何好处。也许在有特殊情况时,我不知道。

2 个答案:

答案 0 :(得分:1)

第一种方法的好处是不会污染全局命名空间,从而降低了名称冲突的风险。如果您扩展现有项目或者您的模块将在多个上下文中使用(例如公共库),这一点尤其重要。

我个人更喜欢第二种风格,而不是特别的原因。有人可能会说优化器更擅长优化非全局代码。

答案 1 :(得分:0)

答案很简单。它是“依赖注入”背后的理念(更多信息见angular docs)。通过使用Angular的内置模块,您可以在以后使用它们时声明对这些模块的依赖关系。这对于能够进行简单的单元测试至关重要。不在全局命名空间中是问题的一部分,但更大的问题是(在每个后续模块中)您可以声明当前模块所依赖的其他模块。

这是一篇不错的文章,详细解释了这个主题:http://joelhooks.com/blog/2013/08/18/configuring-dependency-injection-in-angularjs/