ES6导入和角度控制器的初始化顺序
Initialization order for ES6 imports and angular controllers
正在ES6上运行AngularJS应用程序。从历史上看,我一直使用允许控制器文件向应用程序注册的模式,因为这样我就不必担心文件定义了什么控制器、服务等。使用require(),我已经能够对依赖关系和初始化进行排序,这样做很容易,并且可以专注于控制器文件。
看着迁移到ES6并使用import而不是require(),我发现依赖顺序的代码不再工作。附件是我想做的事情的粗略近似(从未运行)版本。
我唯一想到的是,可以从index.js导出RegisterIndexController()函数,然后由app.js调用它。这很有效,但不知道我是否可以用另一种方式推送依赖关系。控制器可以从app.js 传递"应用程序"
app.js
app = angular.module('app', ['ui.router'])
angular.element(document).ready(() => angular.bootstrap(document, ['app']))
import './controllers/index'
app.run(() => {
})
index.js
app.controller('IndexController', IndexController)
class IndexController {
/*@ngInject*/
constructor() {
this.count = 10
}
}
index.html
<div ng-controller="IndexController as vm">
{{ vm.count }}
</div>
ES6导入被提升到文件的顶部,因此您不能依赖这样的排序。对您来说,问题的核心是您依赖于一个在任何地方都没有定义的隐式依赖项(app
)。显式地导入app
可以确保您真正把事情安排好。
另外请注意,class
声明未被挂起,因此您的控制器注册顺序错误。
app.js
export default angular.module('app', ['ui.router']);
index.js
import app from '../app';
app.controller('IndexController', class IndexController {
/*@ngInject*/
constructor() {
this.count = 10
}
});
entry.js
import app from './app';
import './controllers/index'
angular.element(document).ready(() => angular.bootstrap(document, ['app']))
app.run(() => {
})
相关文章:
- 使用javascript函数在页面初始化后加载jquery
- 未捕获错误:无法在初始化之前调用方法;
- 如何在剑道网格初始化后设置pageSizes
- React redux初始化功能,无论状态变化如何
- 为什么可以't Protractor在自动初始化的Angular网站上查找Angular
- 尝试初始化()Spine's控制器和故障
- Angular.js延迟控制器初始化
- 对插件初始化后动态加载的元素进行样式设置
- Angular JS控制器初始化错误
- 在XMLHttpRequest之后重新初始化jQuery
- ember-js组件初始化不同的函数
- Youtube JavaScript API不是't正在初始化
- 函数无法识别初始化的变量
- ES6模块初始化顺序错误
- 谷歌地图地理编码和初始化顺序
- 在Javascript中创建和初始化对象成员的顺序
- Javascript对象初始化和评估顺序
- 当按相反顺序插入元素时,ReactJS会重新初始化iframe
- ES6导入和角度控制器的初始化顺序
- 为什么它以随机顺序初始化这个 Knockout.js 组件