156 votes

Angular 2 - Utilisation de 'this' dans setTimeout

J'ai une fonction comme celle-ci dans ma classe

  showMessageSuccess(){

    var that = this;
    this.messageSuccess = true;

    setTimeout(function(){
      that.messageSuccess = false;
    },3000);

  }

Comment puis-je réécrire ceci pour ne pas avoir à stocker une référence à "this" dans la variable "that" ? Si j'utilise "this" dans le setTimeout, le bool de messageSuccess ne semble pas changer/être mis à jour.

0 votes

Je crois qu'il ne s'agit pas d'un doublon, les this dans angular est différent du javascript normal. (est convertie en _this dans le code final)

415voto

micronyks Points 4214

Vous devez utiliser Fonction de flèche ()=> ES6 fonction pour préserver this contexte dans lequel setTimeout .

// var that = this;                        // no need of this line
this.messageSuccess = true;

setTimeout(()=>{                           // <<<---using ()=> syntax
    this.messageSuccess = false;
}, 3000);

2 votes

Il fonctionne toujours. Il pourrait y avoir un autre problème. J'aimerais que vous l'examiniez ou que vous posiez une question pertinente à @RomainBruckert.

1 votes

C'est une grande réponse ! Merci, j'ai résolu un gros problème. Au fait, pouvez-vous me suggérer où nous avons besoin d'utiliser ()=> dans angular 7 ?

1 votes

@sid : C'est la norme ES6/ES7. Si vous utilisez Typescript, il est utilisé partout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X