Ionic 4 Удалить страницу из истории (Android) - PullRequest
0 голосов
/ 15 марта 2019

Android-устройств имеет кнопку «Назад» на панели инструментов меню.Я хочу отключить эту возможность, когда я захожу в свое приложение и нажимаю эту кнопку назад, чтобы перейти на страницу входа.

Я хочу, если пользователь нажимает кнопку «Назад» после входа в систему, затем я закрываю приложение.Вот мой начальный код для маршрутизации ниже.

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

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Я пробовал много других ответов, но ни один из них на самом деле не работает для меня.Но это работает:

Чтобы запретить входу в систему «возвращаться» на аутентифицированную страницу после выхода из системы, просто сделайте что-то подобное в вашей app-routing.module.ts:

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

То же самоедля обратного (чтобы не вернуться на страницу входа с помощью кнопки назад):

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

И оба LoggedAuthGuard и NotLoggedAuthGuard должны реализовывать 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'));
}

Надеюсь, это поможет.

0 голосов
/ 15 марта 2019

Я думаю, вы можете сделать так:

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

      if(this.router.url == <insertpathhome>) 
      {
        this.platform.exitApp();
      }
      else{
        //go back
      }
    });  
0 голосов
/ 15 марта 2019

Из вашего вопроса я понял, что после входа в систему пользователь не хочет переходить на страницу входа, если нажата кнопка «Назад». Если я правильно понял ваш вопрос, попробуйте следующее решение.

один из подходов - изменение корневой страницы

this.navCtrl.setRoot(HomePage);

или

Этого можно добиться, удалив страницу из стека после успешного перехода. Поместите ниже код внутри метода входа в систему

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

Надеюсь, это поможет вам.

...