亲测可用,不能用你来找我。
下面是我在做这个事件处理时遇到的一些场景,列出来给大家参考一下,如果写的有错误或者有补充的地方,欢迎大家给我留言,我会及时进行更新更正。同时,也希望这篇文章能够对你有所帮助, 谢谢。
一、未注册返回事件时(即项目初始化状态),点击“返回”按钮时的一些场景处理:
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();
}
}