Я пытаюсь перейти на другую страницу после аутентификации пользователя с помощью углового огня. Все работает, кроме перехода на другую страницу.
Вот мой код:
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()?
пожалуйста, помогите, и укажите пример :)
Вам нужно использовать функции стрелок:
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
в нем не определено).
попытайтесь сделать это
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.
}
});
}
=>
. Правда, это дубликат