【问题标题】:Ionic setRoot leaves multiple instances running at the same timeIonic setRoot 让多个实例同时运行
【发布时间】:2018-02-11 01:50:32
【问题描述】:

我使用nav.push()nav.pop() 进行常规导航,但是当我不想让用户返回时(例如,在成功登录后设置主页),我使用nav.setRoot()延迟加载。当用户更新他们的个人资料时,我还会调用setRoot('HomePage') 来刷新页面。

但是,我遇到的问题是主页被多次加载。即使我在浏览器中按下刷新按钮,控制台中也会显示更多实例!

我已通过 app.component.ts 中的事件侦听器引导所有 setRoot 调用,以跟踪它被调用的次数,但一切看起来都很正常。我试过使用appCtrl.getRootNav().setRoot(page, args),但没有任何变化。

知道去哪里看吗?调用 setRoot 后是否必须手动销毁页面或清除导航堆栈?

谢谢!

编辑(一些代码):

订阅 app.component.ts 中的 setRoot 事件:

this.events.subscribe('nav:setRoot', (data) => {
  let page = data['page'];
  let args = data['data'];
  if(args !== null && args  !== 'undefined'){
    this.appCtrl.getRootNav().setRoot(page, args);
  }else{
    this.appCtrl.getRootNav().setRoot(page);
  } 
});

从任何页面,当我想设置一个新的根页面时:

let arg = { page: 'HomePage'};
this.events.publish('nav:setRoot', arg);

【问题讨论】:

  • Few lines of code is worth a thousand words.你能分享几行代码吗?
  • 嗨 Sampath,我已经编辑了我的问题以展示我是如何做到的。导航过程实际上并不需要那么多代码。谢谢!

标签: ionic-framework ionic2 ionic3


【解决方案1】:
ionViewWillUnload() {
    this.events.unsubscribe("nav:setRoot")
}

这对我有用!

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 它的长期价值,通过展示为什么这是一个很好的解决问题的方法,并且会使其对未来有其他类似问题的读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2010-11-10
相关资源
最近更新 更多