Ionic - AlertController实例抛出未定义的错误

时间:2018-02-11 00:02:15

标签: javascript firebase ionic-framework firebase-authentication ionic3

我的页面组件中有一个功能,一旦执行,它将检查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版本

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?。那里接受的答案还包含一些其他常见的问题解决方案。