【问题标题】:Ionic 4 Delete Page from History (Android)Ionic 4 从历史记录中删除页面 (Android)
【发布时间】:2019-08-06 10:43:47
【问题描述】:

Android 设备在菜单工具栏上有返回按钮。当我登录到我的应用程序并单击该后退按钮以在登录页面上路由时,我想禁用这种可能性。

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

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

【问题讨论】:

    标签: android angular ionic-framework routing


    【解决方案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'));
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      我想在我登录我的应用并点击时禁用这种可能性 该后退按钮可在登录页面上路由。

      【讨论】:

        【解决方案3】:

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

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

        this.navCtrl.setRoot(HomePage);
        

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

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

        希望对你有所帮助。

        【讨论】:

        • 我试过 navigateRoot 但它对我不起作用。我不能使用 remove 方法,因为我使用 ionic 4,它没有这个方法
        • navCtrl 变量在哪里?
        • 先是import { NavController } from 'ionic-angular';,然后是constructor(public navCtrl: NavController) { }here is the doc link
        • @ABHISHEKG 您已将他的文档链接到 ionic v3,但他说他正在使用 ionic v4,它不再具有 .remove() 方法。
        【解决方案4】:

        我认为你可以这样做:

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

        【讨论】:

        • 你能给我提供有关 ionic 4 路由的文档链接吗?
        • 你把 navCtrl 变量放在哪里了?
        • 我不想关闭应用程序,我想在单击右侧的 android 按钮时看到它。 (所有未使用但未关闭的程序(在后台))
        • 我不明白你的问题,你说:“我想如果用户在登录后点击后退按钮然后我关闭应用程序。”对我来说,你想退出应用程序。
        猜你喜欢
        • 2017-11-02
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多