Ionic 4从历史记录中删除页面(Android)

时间:2019-03-15 11:01:39

标签: android angular ionic-framework routing

Android设备的菜单工具栏上有后退按钮。我要在登录应用程序并单击该后退按钮以在登录页面上进行路由时禁用此可能性。

我想要用户登录后单击后退按钮,然后关闭该应用程序。 这是我下面的路由初始代码。

if (token) {
    this.router.navigate(['/main-tabs/tabs/dashboard'])
} else {
    this.router.navigate(['/login']).then();
}

4 个答案:

答案 0 :(得分:1)

我尝试了许多其他答案,但是没有一个对我真正有用。但这是可行的:

要在注销后禁止登录从“返回”到经过身份验证的页面,只需在app-routing.module.ts中执行以下操作即可:

{
    path: 'home',
    loadChildren: './home/home.module#HomePageModule',
    canActivate: [LoggedAuthGuard]
}

反之亦然(以防止使用返回按钮返回登录页面):

{
    path: 'login',
    loadChildren: './login/login.module#LoginPageModule',
    canActivate: [NotLoggedAuthGuard]
}

LoggedAuthGuardNotLoggedAuthGuard都必须实现CanActivate。下面的示例代码(使用Promise,但也可以使用布尔返回值):

import { Injectable } from '@angular/core';
import {CanActivate} from "@angular/router";
import {Storage} from "@ionic/storage";

@Injectable({
  providedIn: 'root'
})
export class LoggedAuthGuard implements CanActivate {
  constructor(protected storage: Storage) { }

  async canActivate() {
      return (await !!this.storage.get('access_token'));
  }
}

对于NotLoggedAuthGuard,您只需返回LoggedAuthGuard的反义词。

async canActivate() {
    return (await !this.storage.get('access_token'));
}

希望这会有所帮助。

答案 1 :(得分:0)

我从您的问题中了解到的是用户登录后,如果单击“后退”按钮,您不想导航到登录页面。如果我正确理解了您的问题,则可以尝试以下解决方案。

  

一种方法是更改​​根页面

this.navCtrl.setRoot(HomePage);

  

您可以通过在成功转换后从堆栈中删除页面来实现此目的。在登录成功方法内的代码下面放置

let currentIndex = this.navCtrl.getActive().index;
this.navCtrl.push(DestinationPage).then(() => {
    this.navCtrl.remove(currentIndex);
});

希望这对您有所帮助。

答案 2 :(得分:0)

This answer提供了一种解决方案,可通过将页面替换为浏览器的历史记录来从浏览器的历史记录中删除该页面,该页面是用户成功登录后导航到的页面。这可能是一个很好且快速的解决方案:

  

当我登录到我的应用程序并单击时,我想禁用该可能性   该后退按钮可在登录页面上进行路由。

答案 3 :(得分:-1)

我认为您可以这样做:

  this.platform.backButton.subscribe((()=>{

      if(this.router.url == <insertpathhome>) 
      {
        this.platform.exitApp();
      }
      else{
        //go back
      }
    });