我的页面组件中有一个功能,一旦执行,它将检查Firebase数据库中是否存在电子邮件。如果是,我想显示一个显示错误消息的警报控制器。
出于某种原因,由于我遇到错误,我无法这样做。代码如下:
doRegister(){
this.fbAuth.auth.createUserWithEmailAndPassword(this.email, this.password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
//console.log(error);
if(errorCode == "auth/email-already-in-use"){
let alert = this.alertCtrl.create({
title: 'Low battery',
subTitle: '10% of battery remaining',
buttons: ['Dismiss']
});
alert.present();
}
});
}
以及我在输入电子邮件并提交表单时收到的错误:
> core.js:1350
ERROR TypeError: Cannot read property 'alertCtrl' of
> undefined
> at registration.ts:34
> at e.b (auth.js:23)
> at Yb (auth.js:26)
> at Ub (auth.js:26)
> at z.h.Qb (auth.js:25)
> at Cb (auth.js:19)
> at t.invoke (polyfills.js:3)
> at Object.onInvoke (core.js:4629)
> at t.invoke (polyfills.js:3)
> at r.run (polyfills.js:3)
我在这里遗漏了什么吗?我实际上使用Ionic官方文档中提供的相同代码来生成警报。
链接位于:Ionic Documentation for Alert Controller
注意:我使用的是Ionic 3.19.1版本
答案 0 :(得分:1)
当你进入回调函数时,this
指的是你所期望的其他东西。回调内部this
是您所在的函数,而不是调用它的上下文。
有很多方法可以确保您仍然可以在原始上下文中调用函数。可能最简单的一个是给原始this
另一个名字:
doRegister(){
var self = this;
this.fbAuth.auth.createUserWithEmailAndPassword(this.email, this.password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
//console.log(error);
if(errorCode == "auth/email-already-in-use"){
let alert = self.alertCtrl.create({
title: 'Low battery',
subTitle: '10% of battery remaining',
buttons: ['Dismiss']
});
alert.present();
}
});
}
有关this
问题的详细说明,请参阅How to access the correct `this` inside a callback?。那里接受的答案还包含一些其他常见的问题解决方案。