从
angularjs 1.5迁移到1.6的文档说:“禁用(默认情况下)控制器实例上绑定的预分配,这有助于支持本机ES6类.” “依赖于绑定存在的初始化逻辑应该放在控制器的$onInit()方法中,保证在分配绑定后始终调用它.”
我尝试为我们的项目进行迁移,我观察到,对于某些控制器,$onInit不会被调用.在官方文档中我没有发现任何与此相关的内容,但还有其他一些来源:
https://www.tejusparikh.com/2017/universality-oninit-callback-angularjs.html
https://github.com/angular/angular.js/issues/14630
还有其他情况,$onInit没有被调用?这是在“更正式”的某处记录的吗?
谢谢!
最佳答案 我发现如果你的控制器返回一个对象,那么就不会触发$onInit.
遵循传统的JS IIFE模块模式,您可以返回将公钥映射到内部方法的对象,从而有效地为私有范围的函数创建公共接口.在转换为带有Controller的Component时,我留下了一些代码,发现在我删除了“return {};”之前没有调用$onInit.在控制器功能结束时.
我不知道这是否与sanyi9正在处理的原因相同,但是即使控制器的其余部分按预期执行(并且其他控制器具有正在运行的$onInit调用),也是$onInit的相同症状未被调用.