angularjs生命周期:$ onInit未调用

时间:2017-04-25 10:23:26

标签: 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的情况下还有其他情况吗?这是在“更正式”的某处记录的吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

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

遵循传统的JS IIFE模块模式,您可以返回将公钥映射到内部方法的对象,从而有效地为私有范围的函数创建公共接口。在转换为带有Controller的Component时,我留下了一些代码,发现$ onInit在我删除" return {};"之后才被调用。在控制器功能结束时。

我不知道这是否与sanyi9处理的原因相同,但是即使控制器的其余部分按预期执行(和其他控制器),它也会被调用$ onInit的相同症状有功能$ onInit来电。)

答案 1 :(得分:0)

我还发现未调用由ngRoute初始化的控制器$ onInit。