Ionic3--Android返回键

亲测可用,不能用你来找我。

下面是我在做这个事件处理时遇到的一些场景,列出来给大家参考一下,如果写的有错误或者有补充的地方,欢迎大家给我留言,我会及时进行更新更正。同时,也希望这篇文章能够对你有所帮助, 谢谢。

一、未注册返回事件时(即项目初始化状态),点击“返回”按钮时的一些场景处理:

1、通过NavController跳转的页面,点击“返回”按钮正常返回;

2、通过ModalController跳转的页面,点击“返回”按钮正常返回;

3、有Alert对话框弹出时,点击“返回”按钮无反应;

4、有键盘弹出时,点击“返回”按钮键盘关闭并且页面直接返回;

5、侧边栏sidemenu展开时,点击“返回”按钮正常关闭;

6、在tabs页面(首页),点击“返回”按钮时直接退出应用。

二、注册了返回事件后,点击“返回”按钮时的一些场景处理:

1、通过NavController跳转的页面,点击“返回”按钮正常返回;

2、通过ModalController跳转的页面,点击“返回”按钮正常返回;

3、有Alert对话框弹出时,点击“返回”按钮正常关闭;

4、有键盘弹出时,点击“返回”按钮只关闭键盘,页面不做返回;

5、侧边栏sidemenu展开时,点击“返回”按钮正常关闭;

6、在tabs页面(首页),点击“返回”按钮时先弹出提示,用户点击“退出”后再退出应用。

 上代码:

//app.component.ts: 

import { App, AlertController, Platform, Keyboard, NavController, IonicApp, MenuController } from 'ionic-angular';

export class MyApp {

  constructor(public appCtrl: App,
              public platform: Platform,
              public keyboard: Keyboard,
              public ionicApp: IonicApp,
              public menuCtrl: MenuController,
              public alertCtrl: AlertController) {

      this.platform.ready().then(() => {
          this.registerBackButtonAction();
      });

  }
  //注册返回按钮
  registerBackButtonAction(): void {

    //registerBackButtonAction方法是系统自带的
    this.platform.registerBackButtonAction(() => {
      //如果键盘开启则隐藏
      if (this.keyboard.isOpen()) {
        this.keyboard.close();
        return;
      }
      //隐藏toast || modal || loading || Overlay
      let activePortal = this.ionicApp._toastPortal.getActive() || 
                         this.ionicApp._overlayPortal.getActive() || 
                         this.ionicApp._modalPortal.getActive();
      let loadingPortal = this.ionicApp._loadingPortal.getActive();
      if (activePortal) {
        //其他的关闭
        activePortal.dismiss().catch(() => {
        });
        activePortal.onDidDismiss(() => {
        });
        return;
      } else if (this.menuCtrl.isOpen()) {
        this.menuCtrl.close(); //关闭sidemenu
        return;
      }
      if (loadingPortal) {
        //loading的话,返回键无效
        return;
      }
      //获取NavController
      let activeNav: NavController = this.appCtrl.getActiveNavs()[0];

      //如果可以返回上一页,则执行pop()
      if (activeNav.canGoBack()) {
        activeNav.pop();
      } else {
        this.showExit();
      }
    })
  }

  //退出应用的方法:
  private showExit(): void {
    let alert = this.alertCtrl.create({
      title: '提示',
      message: '是否确认退出程序',
      buttons: [{
          text: '取消',
          role: 'cancel',
          handler: () => {
          }
        }, {
          text: '退出',
          handler: () => {
            this.platform.exitApp();
          }
        }
      ]
    });
    alert.present();
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值