Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用模块模式或对象定义角度组件是否有任何优势?_Javascript_Angularjs - Fatal编程技术网

Javascript 使用模块模式或对象定义角度组件是否有任何优势?

Javascript 使用模块模式或对象定义角度组件是否有任何优势?,javascript,angularjs,Javascript,Angularjs,我想知道是否值得这样写: (function(angular, module) { 'use strict'; module.controller('MyCtrl', function($scope) { // possibly use helperFunction here }); function helperFunction() { ... } })(angular, angular.module('myModule')); 或者通过这种方式(

我想知道是否值得这样写:

(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)正如在大多数地方所看到的,但我想知道使用前两种方法是否有任何好处。也许有一些特殊情况是有用的,我不知道。

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


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

第一种方法的好处是不会污染全局名称空间,从而降低名称冲突的风险。如果您扩展了现有项目或ule将在多个上下文中使用(例如公共图书馆)


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

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


这里有一篇很好的文章详细解释了这个主题:

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


这里有一篇相当不错的文章对此主题进行了详细的解释:

但我想这些方法都没有扼杀依赖注入的想法。所有角度DI的东西仍然工作得很好。但我想这些方法都没有扼杀依赖注入的想法。所有角度DI的东西仍然工作得很好。