根据我们使用的风格指南,你应该用立即执行函数表达式(IIFE)来包装AngularJS模块。
https://github.com/johnpapa/angular-styleguide/tree/master/a1#iife
my-dir.js
(function() {
'use strict';
angular
.module('my.dir', [])
.controller('MyDirController', MyDirController),
.directive('my-dir', MyDirDirective);
function MyDirController() {
}
function MyDirDirective() {
return {
restrict: 'E',
controller: MyDirController
}
}
})();
应用程序主文件
(function() {
'use strict';
angular
.module('app', ['my.dir'])
})();
但是现在我们正在使用Webpack来捆绑ES6模块。那么我们应该如何使用这个IIFE和export
呢?我们无法像这样执行export default angular.module('my-dir', [])
,因为export
必须是顶级命令。此外,我们应该只返回一个字符串作为模块的名称吗?这样它就可以作为app
模块中的require包含进来了。哪种方法最佳实践?这个方法可行,但你必须重新输入模块名称,并且似乎将export放在IIFE之外有些混乱(我想这必须是这种情况)。(function() {
angular.module('my.dir', [])
.controller('MyDirController', MyDirController)
.directive('my-dir', MyDirDirective);
function MyDirDirective(appPath) {
return {
restrict: 'E',
scope: {},
bindToController: {},
controllerAs: '$ctrl',
template: '<div ng-bind="$ctrl.msg"></div>',
controller: MyDirController
};
}
function MyDirController() {
var self = this;
self.msg = "Hello World";
}
})();
export default 'my.dir'