如何从标签根目录检查当前标签是否可以返回

时间:2017-01-20 13:15:02

标签: ionic2

TLDR:

我有我的标签参考

@ViewChild('tabsPage') tabRef: Tabs;

我需要获取当前标签的导航堆栈,检查它是否可以返回并在需要时返回。

全文:

我有一个标签页,我从另一个带有自定义动画的页面到达。

当用户按下硬件后退按钮时,我的标签的行为必须如下:

  • 如果用户位于选项卡0中,请返回自定义动画;
  • 如果用户不在标签0中,请转到标签0;
  • 如果用户已在当前标签中导航,请返回该标签的导航堆栈。

尝试实现这种行为,我在ionViewDidEnter()内部的tab选项卡中使用了这段代码:

if (this.tabRef.getSelected().index == 0) {
    this.navCtrl.pop({
        animation: 'nav-shrink'
        , direction: 'back'
    })
} else {
    this.tabRef.select(0);
}

问题是:当我在另一个选项卡中导航时,后退按钮不会返回选项卡(例如,从详细信息到列表),它将立即返回到选项卡0

当我在任何标签中进一步导航时,

ionViewWillLeave()不会被调用,因此我无法取消注册backButtonAction。

解决方案是检查当前选项卡是否可以返回,因此,不是转到选项卡0或使用自定义动画从选项卡页面返回,我只需要nav.pop()当前选项卡。 / p>

2 个答案:

答案 0 :(得分:1)

https://ionicframework.com/docs/v2/api/navigation/NavController/

canGoBack() 如果我们可以弹出一个有效的上一页,则返回true。否则返回false。

答案 1 :(得分:0)

显然,Tab本身就是NavController。所以我用这种方式解决了我的问题:

if (this.tabRef.getSelected().canGoBack()) {
    this.tabRef.getSelected().pop();
} else if (this.tabRef.getSelected().index == 0) {
    this.navCtrl.pop({
        animation: 'nav-shrink'
        , direction: 'back'
    })
} else {
    this.tabRef.select(0);
}