ionic3双击返回退出应用的方法


Posted in Javascript onSeptember 17, 2019

ionic3 做双击退出应用的时候按照网上大神的来,从中遇到了一些问题,用this.app.getRootNav().push(MyPage);跳转的页面无法返回,this.app.getActiveNav().pop();这个方法在新的版本中已近被移除了,最后使用另外一种返回方式this.appCtrl.getRootNav().pop();

完整代码:

1.tabs.ts文件

import {Component, ViewChild} from '@angular/core';
 
import { AboutPage } from '../about/about';
import { ContactPage } from '../contact/contact';
import { HomePage } from '../home/home';
import { MyPage } from '../my/my';
import {Tabs} from "ionic-angular";
 
@Component({
 templateUrl: 'tabs.html'
})
export class TabsPage {
 tab1Root = HomePage;
 tab2Root = AboutPage;
 tab3Root = ContactPage;
 tab4Root = MyPage;
 @ViewChild('mainTabs') tabs:Tabs;
 constructor() {
 
 }
}

2.tabs.html文件

<ion-tabs #mainTabs>
 <ion-tab [root]="tab1Root" tabTitle="定位" tabIcon="ios-pin-outline" ></ion-tab>
 <ion-tab [root]="tab2Root" tabTitle="运输管理" tabIcon="ios-paper-outline"></ion-tab>
 <ion-tab [root]="tab3Root" tabTitle="账单管理" tabIcon="logo-yen"></ion-tab>
 <ion-tab [root]="tab4Root" tabTitle="我的" tabIcon="ios-contact-outline"></ion-tab>
</ion-tabs>

3.app.component.ts文件

import {Component, ViewChild} from '@angular/core';
import {Nav, Platform, ToastController,App} from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { Login } from '../pages/login/login';
import { TabsPage } from '../pages/tabs/tabs';
 
@Component({
 templateUrl: 'app.html'
})
export class MyApp {
 rootPage:any;
 public backButtonPressed: boolean = false;
 @ViewChild("myNav") nav: Nav;
 constructor(public platform: Platform,statusBar: StatusBar, splashScreen: SplashScreen,
       public toastCtrl: ToastController,public appCtrl:App) {
  platform.ready().then(() => {
   this.exitApp();
  });
 }
 
 exitApp() {
  this.platform.registerBackButtonAction(() => {
   //控制modal、系统自带提示框
   let overlay = this.appCtrl._appRoot._overlayPortal.getActive() ||  this.appCtrl._appRoot._modalPortal.getActive();
   if (overlay) {
    overlay.dismiss();
    return;
   }
   let activeVC = this.nav.getActive();
   let page = activeVC.instance;
   if (page.tabs) {
    let activeNav = page.tabs.getSelected();
    if (activeNav.canGoBack()) {
     return activeNav.pop();
    } else {
     return this.showExit();
    }
   }
   if (page instanceof Login) {//查看当前页面是否是登陆页面
    this.showExit();
    return;
   }
   this.appCtrl.getRootNav().pop();//剩余的情况返回操作
  });
 }
 
 //双击退出函数
 showExit() {
  if (this.backButtonPressed) {
   this.platform.exitApp();
  } else {
   this.presentToast();//再按一次退出
   this.backButtonPressed = true;
   setTimeout(() => {
    this.backButtonPressed = false;
   }, 2000)
  }
 }
 presentToast() {
  let toast = this.toastCtrl.create({
   message: '再按一次退出应用',
   duration: 2000,
   position: 'top',
  });
  toast.onDidDismiss(() => {
   console.log('Dismissed toast');
  });
  toast.present();
 }
}

4.app.html文件

<ion-nav #myNav [root]="rootPage"></ion-nav>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断页面是关闭还是刷新的js代码
Jan 28 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
javascript调试过程中找不到哪里出错的可能原因
Dec 16 Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
Oct 30 Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
Feb 08 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
Aug 19 Javascript
vue使用codemirror的两种用法
Aug 27 Javascript
vue抽出组件并传值实例
Jul 31 Javascript
如何在 ant 的table中实现图片的渲染操作
Oct 28 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 #Javascript
vue.js购物车添加商品组件的方法
Sep 17 #Javascript
关于vue项目中搜索节流的实现代码
Sep 17 #Javascript
Vue的生命周期操作示例
Sep 17 #Javascript
小程序两种滚动公告栏的实现方法
Sep 17 #Javascript
Vue Extends 扩展选项用法完整实例
Sep 17 #Javascript
react native 仿微信聊天室实例代码
Sep 17 #Javascript
You might like
咖啡语言
2021/03/03 咖啡文化
php 无极分类(递归)实现代码
2010/01/05 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
jquery中获取select选中值的代码
2011/06/27 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
tensorflow更改变量的值实例
2018/07/30 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
公司行政经理岗位职责
2013/12/24 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
小学班级特色活动方案
2014/08/31 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2015年度企业工作总结
2015/05/21 职场文书
2015年教师节感言
2015/08/03 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android