Ionic 4 Удалить страницу из истории (Android)

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

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

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

Ответы 4

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

one approach is changing root page

this.navCtrl.setRoot(HomePage);

или

You can achieve this by removing page from stack after successful transition. Place below code inside Login success method

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

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

Я пробовал navigationRoot, но у меня это не работает. Я не могу использовать метод удаления, потому что я использую ionic 4, и у него нет этого метода

Andrew Kovalchuk 15.03.2019 13:13

Где вы берете переменную navCtrl?

Andrew Kovalchuk 21.03.2019 17:29

сначала import { NavController } from 'ionic-angular';, а потом constructor(public navCtrl: NavController) { }вот ссылка на документ

ABHISHEK G 22.03.2019 15:00

@ABHISHEKG, вы связали его документацию с ionic v3, но он заявляет, что использует ionic v4, в котором больше нет метода .remove().

harmonickey 22.03.2020 18:13

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

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

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

Можете ли вы предоставить мне ссылку на документацию о маршрутизации ionic 4?

Andrew Kovalchuk 18.03.2019 14:20

Где вы берете переменную navCtrl?

Andrew Kovalchuk 21.03.2019 17:29

Я не хочу закрывать приложение, я хочу видеть его, когда я нажимаю правую кнопку Android. (все неиспользуемые, но не закрытые программы (в фоновом режиме))

Andrew Kovalchuk 22.03.2019 11:44

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

Sam 22.03.2019 13:32

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

Чтобы запретить возврат входа на аутентифицированную страницу после выхода из системы, просто сделайте что-то подобное в своем 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'));
}

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

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

I want to disable the possibility when i login to my app and click on that back button to route on login page.

Другие вопросы по теме