Я перенаправил свое приложение из app.component.ts, установив rootpage следующим образом

rootPage:any=HomePage;

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

rootPage:any;//=HomePage;

  constructor(platform: Platform, 
    statusBar: StatusBar, 
    splashScreen: SplashScreen,
    private storage: Storage,
    private changeDetectorRef: ChangeDetectorRef) {

      platform.ready().then(() => {
        // Okay, so the platform is ready and our plugins are available.
        // Here you can do any higher level native things you might need.
        statusBar.styleDefault();
        splashScreen.hide();

        // Check session and redirect
        storage.get('session').then((val) => {
          if(val){
            this.rootPage=HomePage;
          }else{
            this.rootPage=LoginPage;
          }
        });
      });
  }

Но моя страница не перенаправляется.

Что я пробовал -

1. Страница перенаправляется, когда я использую this.changeDetectorRef.detectChanges() после установки корневой страницы, но моя карта на домашней странице не загружается, когда я перенаправляю таким образом.

Есть ли лучшее решение этой проблемы?

0
Dijish U.K 3 Авг 2017 в 15:04

2 ответа

Проблема, вероятно, в том, что вы назначаете страницу rootPage внутри обещания. Поскольку это асинхронная операция, компонент отрисовывается до того, как ему будет назначена корневая страница. Чтобы исправить это, вы можете просто использовать вместо него navCtrl.setRoot и подождать, пока не исчезнет заставка.

ngOnInit() {
  platform.ready().then(() => {
    // Check session and redirect
    storage.get('session').then((val) => {
      statusBar.styleDefault();
      splashScreen.hide();

      if (val) {
        this.navCtrl.setRoot(HomePage);
      } else {
        this.navCtrl.setRoot(LoginPage);
      }
    });
  });
}

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

0
emroussel 3 Авг 2017 в 17:14
Когда я пытаюсь это сделать, я получаю следующую ошибку - Ошибка: нет провайдера для NavController!
 – 
Dijish U.K
4 Авг 2017 в 07:37
Это исправлено, когда я перенаправлял пользователя из ngOnInit ()
 – 
Dijish U.K
4 Авг 2017 в 08:02
Ошибка связана с тем, что вы не инициализировали NavController в своем конструкторе. Рад, что ты это понял
 – 
emroussel
4 Авг 2017 в 17:20

Все работало нормально, когда я перенаправлял пользователя из ngOnInit () следующим образом

ngOnInit() {
 // Check session and redirect
 this.storage.get('session').then((val) => {

   if(val){
     this.rootPage=HomePage;
   }else{
     this.rootPage=LoginPage;
   }

 });
}
0
Dijish U.K 4 Авг 2017 в 08:05