【问题标题】:How can I change tab and go to root of a navigation stack?如何更改选项卡并转到导航堆栈的根目录?
【发布时间】:2018-03-28 00:26:03
【问题描述】:

我正在使用 Ionic 2 并有一组选项卡。每个选项卡都有自己的导航堆栈。

用户可以深入到任何选项卡的几页,然后切换选项卡。

问题是选项卡 1 中的交互会影响选项卡 2 的内容。我发现如果用户以特定顺序执行某些操作,则会出现错误:

运行时错误

未捕获(承诺):找不到 removeView

我认为这是因为 Ionic 正试图删除一个由于内容已更改而不再存在的视图。

在选项卡 1 中,用户按下按钮加载选项卡 2。应用程序将他们所做的选择保存在本地存储中,然后选项卡 2 在根页面上加载。我使用以下代码选择 Tab 2:

this.navCtrl.parent.select(1);

我相信我可以通过在选择选项卡时转到导航堆栈的根来防止这个问题,但我该怎么做呢?

我试过了:

this.navCtrl.parent.select(1);
this.navCtrl.parent.goToRoot();

但是有了这个,什么都没有发生。选项卡没有变化,也没有错误。

那么,我的问题是:如何更改选项卡并从另一个选项卡导航到导航堆栈的根?

【问题讨论】:

  • 您可以设置选项卡 1 的根目录 (this.navCtrl.setRoot(tab1))。如果这对您不起作用,请将您的代码放在可以重现此问题的 plunker 中。

标签: javascript angular typescript ionic-framework ionic2


【解决方案1】:

对于我的应用程序的常规导航堆栈之外的一些页面(Ionic 3 延迟加载),我使用以下代码,在导航到新页面 (popToRoot) 之前设置根 (setRoot):

this.navCtrl
    .setRoot('YourPage')
    .then(() => {
      this.navCtrl.popToRoot();
    }, err => console.log(err))

【讨论】:

  • 我将如何使用我的标签来执行此操作?您的代码确实打开了我的页面,但它是在当前的导航堆栈中打开的,而不是在另一个选项卡上。有没有办法可以引用我的选项卡并导航回根目录?
  • 未测试,但我认为您可以使用 this.app.getRootNav() 而不是 navCtrl 来完成,如 here 所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2018-08-21
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多