它's been a couple of months since I'使用Ionic Framework(ionic-angular 3.9.2 latest )来构建Progressive Web Apps . 与此同时,我一直想知道 ngOnInit
和 ionViewWillLoad
之间的区别 .
如果我没错,我相信 ngOnInit
是一个Angular lifecycle hook并初始化指令和组件 . (设置指令/组件的输入属性 . )
ionViewWillLoad
是一个Ionic navigation lifecycle event,它似乎在 ionViewDidLoad
(一切已经加载)事件被触发之前执行 . 看起来 ionViewWillLoad
事件尚未添加到NavController,文档还没有更新 .
据我所知,构造函数由JavaScript引擎调用,应该避免使用它进行复杂的初始化 . (details: why you should avoid complex constructor logic)
出于这个原因,我在Ionic设置输入属性后使用了 ionViewWillLoad
来设置组件 .
我不确定为什么,但 ionViewWillLoad
是唯一一个没有出错的事件 .
export class UsernamePage {
usernameControl: FormControl;
constructor(private userService: UserServiceProvider){ }
// No errors
ionViewWillLoad() { this.createUsernameForm(); }
// Errors
ionViewWillEnter() { this.createUsernameForm(); }
ionViewDidEnter() { this.createUsernameForm(); }
ionViewDidLoad() { this.createUsernameForm(); }
createUsernameForm() {
this.usernameControl = new FormControl('',
{
validators: [Validators.required, Validators.minLength(4)],
asyncValidators: CustomValidator.username(this.userService)
});
}
}
我应该坚持使用 ionViewWillLoad
?或者更好地实现OnInit接口?有什么不同?
1 回答
在Ionic 3中你应该使用
它应该用于您每次要执行的任务,例如访问可能已更改的数据或更新表 .
对于不需要每次都触发的页面初始化任务都是一个很好的钩子,因为在进入已经缓存的视图时不会触发它 .