Ionic 2 Angular 2 - не удается получить доступ к NavController из метода

1

Я пытаюсь перейти на другую страницу после аутентификации пользователя с помощью углового огня. Все работает, кроме перехода на другую страницу.

Вот мой код:

  constructor(public navCtrl: NavController, public menu: MenuController, public afAuth: AngularFireAuth, public db: AngularFireDatabase, private platform  : Platform) {
    this.navigateIfUserIsLogdIn();
  }

  navigateIfUserIsLogdIn(){
        this.authState = this.afAuth.authState;
        this.user = this.afAuth.auth.currentUser;

        this.afAuth.auth.onAuthStateChanged(function(user) {
          if (user) {
            // User is signed in.
            this.navCtrl.setRoot(HomePage);
          } else {
            // No user is signed in.
          }
        });
  }

Ошибка, которую я получаю:

Ошибка: нечистить (в обещании): TypeError: невозможно прочитать свойство "navCtrl" неопределенного

Почему это не работает, когда внутри navigateIfUserIsLogdIn()?

пожалуйста, помогите, и укажите пример :)

Теги:
ionic3
ionic2
lexical-scope

2 ответа

2
Лучший ответ

Вам нужно использовать функции стрелок:

navigateIfUserIsLogdIn(){
    this.authState = this.afAuth.authState;
    this.user = this.afAuth.auth.currentUser;

    this.afAuth.auth.onAuthStateChanged((user) => {
      if (user) {
        // User is signed in.
        this.navCtrl.setRoot(HomePage);
      } else {
        // No user is signed in.
      }
    });
}

Обратите внимание, что теперь мы делаем

this.afAuth.auth.onAuthStateChanged((user) => {...});

вместо

this.afAuth.auth.onAuthStateChanged(function(user) {

Используя функции стрелок, this свойство не перезаписывается и все еще ссылается на экземпляр компонента (иначе this ключевое слово указывает на внутреннюю функцию, а navCtrl в нем не определено).

  • 2
    Великий ответ! Спасибо! :)
  • 0
    Рад помочь :)
-1

попытайтесь сделать это

     constructor(public navCtrl: NavController, public menu: MenuController, public afAuth: AngularFireAuth, public db: AngularFireDatabase, private platform  : Platform) {
    this.navigateIfUserIsLogdIn();
  }

  navigateIfUserIsLogdIn(){
        this.authState = this.afAuth.authState;
        this.user = this.afAuth.auth.currentUser;
        var that= this;
        this.afAuth.auth.onAuthStateChanged(function(user) {
          if (user) {
            // User is signed in.
            that.navCtrl.setRoot(HomePage);
          } else {
            // No user is signed in.
          }
        });
  }
  • 1
    По крайней мере, объясните, почему, и укажите вариант использования => . Правда, это дубликат

Ещё вопросы

Сообщество Overcoder
Наверх
Меню