无法读取 null 的 属性 'alertCtrl'
Cannot read property 'alertCtrl' of null
我正在使用 Firebase v3 作为我的数据库开发一个 ionic 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
})
}
});
}
我尝试了很多不同的解决方案,但似乎没有任何效果:(
提前致谢!
由于您在函数内部(此函数: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
})
}
});
}
区别在于现在您使用的是箭头函数并且...
An arrow function expression has a shorter syntax than a function
expression and does not bind its own this, arguments, super, or
new.target.
我正在使用 Firebase v3 作为我的数据库开发一个 ionic 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
})
}
});
}
我尝试了很多不同的解决方案,但似乎没有任何效果:( 提前致谢!
由于您在函数内部(此函数: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
})
}
});
}
区别在于现在您使用的是箭头函数并且...
An arrow function expression has a shorter syntax than a function expression and does not bind its own this, arguments, super, or new.target.