强制调用ngOnDestroy和ngOnInit

时间:2019-12-16 18:46:52

标签: angular routing routes ionic4 lazyload

我的组件没有被杀死,可以再次创建。

我转到“ / tabs / home / order”,将网址更改为“ / tabs / home / wallet”后,订单页面不会被破坏,如果我返回“ tabs / home / order”页面执行ngOnInit 与模块或路由结构有关吗?

什么触发了角度生命周期挂钩?

当URL更改时,如何强制其杀死并重新创建?

enter image description here

如果有任何与模块结构相关的内容,则该项目的模块结构是垃圾,home模块被延迟加载,并将Wallet和Order组件一起加载,并且这些组件的生命周期挂钩未调用

1 个答案:

答案 0 :(得分:2)

您描述的看似意外的行为是由于Ionic引起的。更具体地说,这是由于how Ionic deals with the life of a page造成的。

  

当您导航到新页面时,Ionic会将旧页面保留在   现有的DOM,但将其从您的视图中隐藏并转换新页面。

...

  

由于这种特殊的处理方式,因此ngOnInit和ngOnDestroy   通常您认为应该使用的方法可能不会触发。

     

ngOnInit仅在每次新创建页面时触发,但不会触发   导航回该页面时。例如,在每个   标签界面中的页面只会调用每个页面的ngOnInit方法   一次,但以后不会访问。 ngOnDestroy仅在   页面“弹出”。

在不了解您的应用程序的情况下,我建议使用Ionic Lifecycle events而不是Angular的应用程序。听起来您可以将ngOnInit替换为ionViewWillEnter,然后将ngOnDestroy替换为ionViewWillLeaveionViewDidLeave

文档中的下一部分是一些有用的guidance for each lifecycle method