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全选实现和判断是否有复选框选中的方法
Feb 17 Javascript
jqGrid表格应用之新增与删除数据附源码下载
Dec 02 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
Jan 10 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
深入理解react 组件类型及使用场景
Mar 07 Javascript
js中async函数结合promise的小案例浅析
Apr 14 Javascript
JS多个异步请求 按顺序执行next实现解析
Sep 16 Javascript
浅谈Three.js截图并下载的大坑
Nov 01 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/04 无线电
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
PHP中常用的魔术方法
2017/04/28 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
Augularjs-起步详解
2016/07/08 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python数组复制拷贝的实现方法
2015/06/09 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
python ftplib模块使用代码实例
2019/12/31 Python
Python os模块常用方法和属性总结
2020/02/20 Python
python中有函数重载吗
2020/05/28 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
JAVA高级程序员面试题
2013/09/06 面试题
毕业生求职的求职信
2013/12/05 职场文书
城管大队整治方案
2014/05/06 职场文书
安全生产工作汇报
2014/10/28 职场文书
土地租赁协议书
2015/01/29 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript
mysql主从复制的实现步骤
2021/10/24 MySQL
Python中的datetime包与time包包和模块详情
2022/02/28 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python