无法在离子 4 的函数内调用警报

Can't call an alert inside a function in ionic 4

我不想在实现 Firebase 身份验证的函数内调用警报。

我的 Typescript 代码(jQuery 启用):

async emptyAlert() {
    const empty = await this.alertController.create({
      header: 'Error!',
      message: 'All fields are required. Please fill the details and try again',
      buttons: ['OK']
    });

    await empty.present();
  }
async errorAlert(message) {
    const errorAl = await this.alertController.create({
      header: 'Error!',
      message: message,
      buttons: ['OK']
    });
    await errorAl.present();
  }

  doLogin() {
    const email = $('#loginEmail').val();
    const password = $('#loginPassword').val();
    if (email === '' || password === '') {
      this.emptyAlert();
    } else {
      firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
        // Handle Errors here.
        // const errorCode = error.code;
        const errorMessage = error.message;
        this.errorAlert(errorMessage);
      });
    }
  }

请注意上面的代码是在constructor(public alertController: AlertController) { }出现在export class LoginPage implements OnInit{…}

之后实现的

我可以调用 emptyAlert(),这是一个与 errorAlert 类似的警报,但是当我调用 errorAlert() 时,它显示 ERROR TypeError: Cannot read 属性 'errorAlert' 未定义.

请帮忙。 提前致谢。

您需要使用arrow function,这是自动绑定的correctly.you如果您计划支持浏览器,可以转译箭头函数

firebase.auth().signInWithEmailAndPassword(email, password).catch((error) => {
        // Handle Errors here.
        // const errorCode = error.code;
        const errorMessage = error.message;
        this.errorAlert(errorMessage);
});

您好尝试用箭头函数替换您的回调函数,例如:

firebase.auth().signInWithEmailAndPassword(email, password).catch((error) => {
        // Handle Errors here.
        // const errorCode = error.code;
        const errorMessage = error.message;
        this.errorAlert(errorMessage);
      });

希望对您有所帮助。

当你使用function(error) {}时,this代表新的作用域。

你应该使用 () => {} 所以它在相同的范围内。

firebase.auth().signInWithEmailAndPassword(email, password).catch((error) => {
  // Handle Errors here.
  // const errorCode = error.code;
  const errorMessage = error.message;
  this.errorAlert(errorMessage);
});