platform.ready().then(() => { this.platform.registerBackButtonAction(() => { let activePortal = this.ionicApp._modalPortal.getActive() ||this.ionicApp._overlayPortal.getActive(); console.log(activePortal) let loadingPortal = this.ionicApp._loadingPortal.getActive(); if (activePortal) {
//其他的关闭 activePortal.dismiss().catch(() => { }); activePortal.onDidDismiss(() => { }); return; } if (menuCtrl.isOpen()) {
menuCtrl.close(); console.log("closing menu"); return; } if (loadingPortal) { //loading的话,返回键无效 return; }
//获取NavController if(this.keyboard.isOpen()){ this.keyboard.close(); return; }
let activeNav: NavController = this.appCtrl.getActiveNav();
console.log(this.appCtrl); console.log(activeNav)
//如果可以返回上一页,则执行pop
if (activeNav.canGoBack()) { activeNav.pop(); } else {
//执行退出 this.showExit();
} });
});
private alertT(content){ this.alert = this.alertCtr.create({ // spinner: 'hide', title:'' , enableBackdropDismiss:false, // duration: 3000 }); this.alert.present(); } //退出应用方法 private showExit(): void { //如果为true,退出 if (this.backButtonPressed) { this.platform.exitApp(); } else { //第一次按,弹出Toast if (localStorage.getItem("language") === 'zh') { this.commonUtils.showToast("再按一次退出应用", 2000) } else { this.commonUtils.showToast("Press again to exit the app", 2000) } // this.toastCtrl.create({ // message: '再按一次退出应用', // duration: 2000, // position: 'bottom' // }).present(); //标记为true this.backButtonPressed = true; //两秒后标记为false,如果退出的话,就不会执行了 setTimeout(() => this.backButtonPressed = false, 2000); } }
主要解决的问题是:modal 的关闭
代码:
let activePortal = ionicApp._loadingPortal.getActive() || ionicApp._modalPortal.getActive() || ionicApp._toastPortal.getActive() || ionicApp._overlayPortal.getActive(); if (activePortal) { ready = false; activePortal.dismiss(); activePortal.onDidDismiss(() => { ready = true; }); Logger.log("handled with portal"); return; } if (menuCtrl.isOpen()) { menuCtrl.close(); Logger.log("closing menu"); return; }
另外本来 这块内容是写再指令里的发现 指令里不能用ionicApp 这个方法,最好把内容放到初始化位置。