angularjs生命周期:不调用$ onInit

san*_*yi9 7 angularjs

从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吗?是否在“更正式”的地方进行了记录?

谢谢!

mse*_*nne 2

我发现如果你的控制器返回一个对象,那么 $onInit 将不会被触发。

按照传统的 JS IIFE 模块模式,您可以返回一个将公钥映射到内部方法的对象,从而有效地为您的私有作用域函数创建一个公共接口。当我转换为带有控制器的组件时,我留下了一些代码,发现在删除“return {};”之前,$onInit 没有被调用。在控制器功能的末尾。

我不知道这是否与 sanyi9 正在处理的原因相同,但这与 $onInit 没有被调用的症状相同,即使控制器的其余部分按预期执行(并且其他控制器具有正常的 $onInit 调用)。