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的东西仍然工作得很好。