我正在使用Firebase v3作为我的数据库处理离子2应用程序;我的功能已经有效,但是当我尝试显示一个简单的提示告诉用户错误时它给了我这个错误:
Cannot read property 'alertCtrl' of null
这是我的功能:
updateUniqueCode(uniqueCode: string): any {
this.userProfile.on("child_added", function(snapshot,prevChildKey){
let allUniqueCodes = snapshot.val();
if (allUniqueCodes.uniqueCode === uniqueCode){
let alert = this.alertCtrl.create({
message: "no",
buttons: [{ text: "Ok"} ]
});
alert.present();
} else {
let currentUser = firebase.auth().currentUser;
let userProfile = firebase.database().ref('/userProfile');
return userProfile.child(currentUser.uid).update({
uniqueCode:uniqueCode
})
}
});
}
我尝试了很多不同的解决方案,但似乎没有任何效果:( 提前谢谢!
答案 0 :(得分:1)
由于您在函数内部(此函数:function(snapshot,prevChildKey){ ... }
),this
关键字不再是对该组件的引用。尝试这样做:
updateUniqueCode(uniqueCode: string): any {
this.userProfile.on("child_added", (snapshot,prevChildKey) => {
let allUniqueCodes = snapshot.val();
if (allUniqueCodes.uniqueCode === uniqueCode){
let alert = this.alertCtrl.create({
message: "no",
buttons: [{ text: "Ok"} ]
});
alert.present();
} else {
let currentUser = firebase.auth().currentUser;
let userProfile = firebase.database().ref('/userProfile');
return userProfile.child(currentUser.uid).update({
uniqueCode:uniqueCode
})
}
});
}
不同之处在于,现在您正在使用箭头功能......
箭头函数表达式的语法短于函数 表达式和不绑定它自己的,参数,超级或 new.target。