Как я могу установить корневую страницу вне вкладок, которые не удерживают вкладки на месте?

Поток моего приложения означает, что нет никаких вкладок, пока пользователь не войдет в систему. Первая страница - это полноэкранный экран входа в систему. После входа в систему пользователь попадает в tabs.ts который содержит мой код вкладок.

На одной из вкладок есть кнопка для выхода пользователя из системы:

user.ts:

  // Logout
  logout() {    
    // Log the user out
    this.user.logout();

    // Take user to login screen
    this.navCtrl.setRoot(LoginPage);
  }

Я думал, что установка рута LoginPage, который не является частью какой-либо вкладки, удалил бы вкладки. К сожалению нет, и вкладки остаются. Это действительно проблематично по понятным причинам.

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

2 ответа

Решение

После публикации я нашел ответ на форумах Ionic.

По сути, каждая вкладка поддерживает свой собственный стек навигации, о котором я знал, но ожидал setRoot обойти стек. Логически это не так.

Вместо этого вам нужно позвонить getRootNav().setRoot() на ваше App,

App импортируется из ionic-angular, а затем перешел на ваш контроллер.

Полный (хотя и усеченный) пример:

import { Component } from '@angular/core';
import { App } from 'ionic-angular';

@Component({
  selector: 'page-profile',
  templateUrl: 'profile.html'
})
export class ProfilePage {

  constructor(
    private app: App
  ) {

  }

  // Logout
  logout() {
    // Take user to login screen
    this.app.getRootNav().setRoot(LoginPage);
  }

}

Вы можете использовать Angular router и перемещать пользователя на страницу входа после нажатия кнопки выхода.

this.router.navigate(["login"]). 

Установите надлежащие средства защиты маршрутизации, чтобы пользователь не мог получить доступ к маршруту, если он не вошел в систему. https://angular.io/guide/router

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