首页 文章

ngOnInit和ionViewWillLoad生命周期挂钩/事件之间的关联

提问于
浏览
2

它's been a couple of months since I'使用Ionic Framework(ionic-angular 3.9.2 latest )来构建Progressive Web Apps . 与此同时,我一直想知道 ngOnInitionViewWillLoad 之间的区别 .

如果我没错,我相信 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 回答

  • 0

    在Ionic 3中你应该使用

    ionViewWillEnter () {
        console.log('fired every time you enter the view');
      }
    

    它应该用于您每次要执行的任务,例如访问可能已更改的数据或更新表 .

    ionViewDidLoad () {
        console.log('not fired on entering a view that is already cached');
      }
    

    对于不需要每次都触发的页面初始化任务都是一个很好的钩子,因为在进入已经缓存的视图时不会触发它 .

相关问题