将 angularjs 模块导出为 es6 模块
Exporting angularjs module as es6 module
您应该根据我们使用的样式指南将 angularjs 模块包装在 IIFE 中
https://github.com/johnpapa/angular-styleguide/tree/master/a1#iife
我的-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
}
}
})();
app.js
(function() {
'use strict';
angular
.module('app', ['my.dir'])
})();
但是因为我们现在使用webpack来打包es6模块。我们应该如何使用这个 IIFE 和 export
?我们不能做 export default angular.module('my-dir', [])
因为 export 必须是顶级命令。另外,我们应该只返回模块名称的字符串吗?这样它就可以作为一个要求包含在 app
模块中。最佳做法是什么?
这行得通,但是您必须重新输入模块名称,并且在 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'
移动到模块后,新结构变成了
app.js
import myDir from './my-dir.js'
angular.module('app', [myDir.name]);
我的-dir.js
// import template from './my-dir.html'; // Can use this with template property
export default angular.module('my.dir', [])
.controller('MyDirController', MyDirController)
.directive('my-dir', MyDirDirective);
function MyDirDirective() {
return {
restrict: 'E',
scope: true,
bindToController: {},
controllerAs: '$ctrl',
template: '<div ng-bind="$ctrl.msg"></div>',
controller: MyDirController
};
}
function MyDirController() {
const self = this; // Not needed if using arrow functions
self.msg = "Hello World";
}
不再需要 IIFE,因为如果始终使用任何类型的 javascript 模块系统,现在默认情况下一切都是模块
您应该根据我们使用的样式指南将 angularjs 模块包装在 IIFE 中
https://github.com/johnpapa/angular-styleguide/tree/master/a1#iife
我的-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
}
}
})();
app.js
(function() {
'use strict';
angular
.module('app', ['my.dir'])
})();
但是因为我们现在使用webpack来打包es6模块。我们应该如何使用这个 IIFE 和 export
?我们不能做 export default angular.module('my-dir', [])
因为 export 必须是顶级命令。另外,我们应该只返回模块名称的字符串吗?这样它就可以作为一个要求包含在 app
模块中。最佳做法是什么?
这行得通,但是您必须重新输入模块名称,并且在 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'
移动到模块后,新结构变成了
app.js
import myDir from './my-dir.js'
angular.module('app', [myDir.name]);
我的-dir.js
// import template from './my-dir.html'; // Can use this with template property
export default angular.module('my.dir', [])
.controller('MyDirController', MyDirController)
.directive('my-dir', MyDirDirective);
function MyDirDirective() {
return {
restrict: 'E',
scope: true,
bindToController: {},
controllerAs: '$ctrl',
template: '<div ng-bind="$ctrl.msg"></div>',
controller: MyDirController
};
}
function MyDirController() {
const self = this; // Not needed if using arrow functions
self.msg = "Hello World";
}
不再需要 IIFE,因为如果始终使用任何类型的 javascript 模块系统,现在默认情况下一切都是模块