ionic、platform实现系统返回功能,并解决退出时存在路由回退的多余行为

	基于现在语言框架技术更新较快,很多功能的实现都不能按以前老旧的做法去完成了,本人在实际开发中也经常遇到这样的场景,所以一方面记录一下自己的做法,同时也希望给跟我一样遇到类似问题的小伙伴提供一点小小的帮助。
	
	*问题/需求*:**ionic、platform实现系统返回功能,并解决退出时存在路由回退的多余行为**
  1. 1.系统回退功能做法:
    关键方法:navigator[‘app’].exitApp();

    关键代码如下:
    
initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();
    });
  }

  // 实体返回 退出程序
  lastTimeBackPress = 0;
  timePeriodToExit = 1000;

  backButtonEvent() {
    this.platform.backButton.subscribe(() => {
      // alert(this.router.url);
      if (this.router.url == '/login' || this.router.url == '/tabs/home' || this.router.url == '/tabs/newsletter' || this.router.url == '/tabs/myinfo') {
        if ( new Date().getTime() - this.lastTimeBackPress < this.timePeriodToExit) {
          navigator['app'].exitApp();
        } else {
          this.presentAlertConfirm();
          this.lastTimeBackPress = new Date().getTime();
        }
      }
    });
  }

完整贴图:
做法演示
采用这种做法时你会发现这个过程中存在一个多余的行为,就是在按系统返回键时,app在退出动作完成之前,会进行多余的路由回退到登录界面的行为。但是大部分产品都会在意这一点,要求取消这一多余行为,本人的做法如下:

import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot} from '@angular/router';
import { NavController } from '@ionic/angular';

@Injectable({
   providedIn: 'root'
})
export class LoginGuard implements CanActivate {

   constructor(private navCtl: NavController) {}

   canActivate(
      route: ActivatedRouteSnapshot,
      state: RouterStateSnapshot ): boolean {
         const token = localStorage.getItem('token');
         if (token == null || token === undefined) {
            // this.navCtl.navigateForward('login');
            return true;
         }
         
         return false;
      }
}

其实也就是给登录页面加一个路由守卫,以上是注册路由守卫的代码。这个做法是让已登录用户不能回退到登录界面,但是可以通过退出登录按钮跳转到登录界面。
当然不止这一种做法,大家可以采用自己觉得更合适的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值