Je ne veux pas appeler une alerte dans une fonction qui implémente l'authentification Firebase.

Mon code Typescript (jQuery activé) :

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);
      });
    }
  }

Veuillez noter que le code ci-dessus est implémenté après constructor(public alertController: AlertController) { } present inside export class LoginPage implements OnInit{…}

Je peux appeler emptyAlert (), qui est une alerte similaire comme errorAlert, mais quand j'appelle errorAlert (), il dit ERROR TypeError: Impossible de lire la propriété 'errorAlert' de undefined .

Veuillez aider. Merci d'avance.

0
Kumar Priyansh 27 janv. 2019 à 14:14

3 réponses

Meilleure réponse

Vous devez utiliser arrow function , il est automatiquement lié correctement.vous pouvez transpiler les fonctions fléchées si vous prévoyez de prendre en charge les navigateurs

firebase.auth().signInWithEmailAndPassword(email, password).catch((error) => {
        // Handle Errors here.
        // const errorCode = error.code;
        const errorMessage = error.message;
        this.errorAlert(errorMessage);
});
1
Sajeetharan 27 janv. 2019 à 11:17

Salut, essayez de remplacer votre fonction de rappel par une fonction de flèche comme:

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

J'espère que cela pourra aider.

0
Amir Arbabian 27 janv. 2019 à 11:17

Lorsque vous utilisez function(error) {}, this représente une nouvelle portée.

Vous devez utiliser () => {} pour qu'il soit dans la même portée.

firebase.auth().signInWithEmailAndPassword(email, password).catch((error) => {
  // Handle Errors here.
  // const errorCode = error.code;
  const errorMessage = error.message;
  this.errorAlert(errorMessage);
});
0
mahfuz 27 janv. 2019 à 11:20