Nano Hash - криптовалюты, майнинг, программирование

Изменение корня Ionic 2 программно

У меня есть проект на Android, в котором я хотел бы динамически изменить корневую страницу, если пользователь вошел в систему или нет.

В файле app.component.ts. Я проверяю локальное хранилище на наличие флага, который определяет, вошел ли пользователь в систему. Если это так, он переводит их на вторую страницу и не показывает страницу входа. Если это не так, он показывает им страницу входа.

Моя проблема в том, что локальное хранилище GET является обещанием, и оно завершает конструктор app.component.ts до того, как у него появится возможность (он переходит на экран входа в систему и показывает его), затем, когда обещание завершено, он переключается на 2-й экран. Я вообще не хочу показывать экран входа в систему, если они уже вошли в систему.

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

22.11.2016

Ответы:


1

Новое решение, теперь немного более элегантное. Я устанавливаю корень программно только после того, как доберусь до хранилища и проверю, должно ли оно показывать Home или Login.

@Component({
    template: `<ion-nav #nav></ion-nav>`
)
export class MyApp {

    @ViewChild('nav') nav: Nav;

    constructor(platform: Platform, storage: Storage) {
        this.storage.get('isLogged').then(logged => {
           if (logged) {
              this.nav.setRoot(HomePage);
           } else {
              this.nav.setRoot(LoginPage);
           }
    });
}

Перед редактированием

Не очень элегантное решение, и я буду следить за тем, есть ли лучший способ, но в моем случае я отложил выдачу рута с помощью * ngIf.

Мой AppComponent выглядит примерно так:

@Component({
   template: `<ion-nav *ngIf="showRoot" [root]="rootPage"></ion-nav>`
})
export class MyApp {

  rootPage:any = LoginPage;

  showRoot = false;

  constructor(platform: Platform, storage: Storage) {

    this.storage.get('isLogged').then(logged => {
        if (logged) {
           this.rootPage = HomePage;
        }
        this.showRoot = true;
    });
  }
}
22.11.2016
  • Это сработало. Спасибо. Однако я почти уверен, что вы имели в виду this.rootPage = HomePage и this.showRoot = true, а не this.hasRoot = true. 22.11.2016
  • @VictorIvens Я думаю, что в строке есть синтаксическая ошибка. @ViewChild('nav') nav: Навигация; Это должно быть @ViewChild('nav') nav: NavController; 18.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..