从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的情况下还有其他情况吗?这是在“更正式”的某处记录的吗?
谢谢!
答案 0 :(得分:2)
我发现如果你的控制器返回一个对象,那么就不会触发$ onInit。
遵循传统的JS IIFE模块模式,您可以返回将公钥映射到内部方法的对象,从而有效地为私有范围的函数创建公共接口。在转换为带有Controller的Component时,我留下了一些代码,发现$ onInit在我删除" return {};"之后才被调用。在控制器功能结束时。
我不知道这是否与sanyi9处理的原因相同,但是即使控制器的其余部分按预期执行(和其他控制器),它也会被调用$ onInit的相同症状有功能$ onInit来电。)
答案 1 :(得分:0)
我还发现未调用由ngRoute初始化的控制器$ onInit。