【问题标题】:Remove a view from the back history - Ionic2从后面的历史记录中删除一个视图 - Ionic2
【发布时间】:2016-07-14 08:33:24
【问题描述】:

有人知道如何从 ionic2 中的返回历史记录(或导航堆栈)中删除视图吗?

在 Ionic 1 中我解决了这个问题

this.$ionicHistory.nextViewOptions({
  disableAnimate: true, 
  disableBack: true
});

将非常有用,例如,在成功登录后从历史记录中完全删除我的应用程序的登录页面。

在这种情况下,仅仅不显示后退按钮是不够的,因为 Android 终端在设备上拥有自己的物理后退按钮。

我试过了,在我的登录函数返回一个成功的承诺之后,然后在堆栈中推送下一页:

this.navController.pop();

this.navController.remove(this.viewCtrl.index);

但不幸的是,两者都没有成功:(

【问题讨论】:

    标签: ionic2


    【解决方案1】:

    Ionic 3 遇到了同样的问题。
    因此,只需两步即可重置历史记录:

    // ...
    constructor(public navCtrl: NavController) { }
    // ...
    this.navCtrl.setRoot(NewPageWithoutPrev);
    this.navCtrl.popToRoot();
    // ...
    

    链接:
    https://ionicframework.com/docs/api/navigation/NavController/#setRoot
    https://ionicframework.com/docs/api/navigation/NavController/#popToRoot

    【讨论】:

    • popToRoot 电话对我来说不是必需的。此外,您可以将 NavOptions 传递给 setRoot,例如 animate: truedirection: "forward" 使其动画平滑到新的根。
    • 可以确认,只需要setRoot清除历史重新开始页面
    【解决方案2】:

    要删除一个后视图,您需要使用 startIndex 和要从堆栈中删除的页数。

        this.navCtrl.push(NextPage)
        .then(() => {
          const startIndex = this.navCtrl.getActive().index - 1;
          this.navCtrl.remove(startIndex, 1);
        });
    

    查看此文档了解更多选项,例如 removeView(viewController): https://ionicframework.com/docs/v2/api/navigation/NavController/#remove

    【讨论】:

    • 你太棒了!
    【解决方案3】:

    https://forum.ionicframework.com/t/solved-disable-back-in-ionic2/57457 上的 obrejacatalin 找到了解决方案

    this.nav.push(TabsPage).then(() => {
      const index = this.nav.getActive().index;
      this.nav.remove(0, index);
    });
    

    所以我想先push下一页很重要,等待promise的答案,然后删除当前视图

    【讨论】:

    • 这并没有真正回答 OP 的问题:他要求删除“一页”而不是全部。
    • 嗯,是的,它只删除了一页,而且我是 OP,我确实回答了我自己的问题,所以是的,它确实解决了我的问题 ;)
    • @DavidDalBusco 对此笑了
    猜你喜欢
    • 2012-05-31
    • 2019-08-06
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2013-03-22
    相关资源
    最近更新 更多