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 相关文章推荐
extJs 下拉框联动实现代码
Apr 09 Javascript
使用javascript创建快捷方式的简单实例
Aug 09 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
JQuery记住用户名密码实现下次自动登录功能
Apr 27 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
很实用的js选项卡切换效果
Aug 12 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
Aug 12 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 Javascript
Preload基础使用方法详解
Feb 03 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
jquery解析xml字符串示例分享
2014/03/25 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
js代码实现轮播图
2020/05/04 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
大韩航空官方网站:Korean Air
2017/10/25 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
售后服务经理岗位职责
2014/02/25 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
出租房屋协议书
2014/09/14 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
入伍通知书
2015/04/23 职场文书
教师节表彰会主持词
2015/07/06 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
Django使用echarts进行可视化展示的实践
2021/06/10 Python
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle