我需要这样做:
async doLogin(user: User) {
try {
const result = await this.AngularFireAuth.auth.signInWithEmailAndPassword(user.email, user.password);
if (result) {
this.AngularFireAuth.authState.subscribe(user => {
if (user) {
var ref = firebase.database().ref(`profile/${user.uid}`);
ref.once("value")
.then(function(snapshot) {
var key = snapshot.key;
if (user.uid === key) {
this.navCtrl.setRoot(HomePage);
}
else {
this.navCtrl.setRoot(ProfilePage);
}
});
}
});
}
}
catch (error) {
let toast = this.toastCtrl.create({
message: this.loginErrorString,
duration: 3000,
position: 'top'
});
toast.present();
}
}
但是我收到了这个错误:TypeError: Cannot read property 'navCtrl' of undefined
我不知道为什么会这样做,但我认为方法doLogin无法读取模块navCtrl。 navCtrl方法显然被添加到构造中。
最好的问候朋友
答案 0 :(得分:1)
首先,尝试使用箭头函数(snapshot) => {...}
而不是常规function(snapshot) {...}
。在您的情况下,您使用的是this
关键字,因此旧功能存在许多问题,这些问题已在新的ES6箭头功能中得到解决!
有关箭头功能和this
的更多信息:https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4