J'écris du code TypeScript et j'itère un tableau. À l'intérieur de la boucle, j'essaie d'accéder à "cet" objet pour effectuer un traitement comme:
console.log('before iterate, this = ' +this);
myarray.days.forEach(function(obj, index) {
console.log('before transform, this : ' + this);
this.datePipe.transform...
});
mais cela échoue, car il se plaint que "ceci" n'est pas défini "cet" objet s'imprime correctement comme [objet objet] avant/en dehors de la boucle, mais à l'intérieur de la boucle, il n'est pas défini. Pourquoi donc? Et quelle est la solution pour cela?
Vous devez soit utiliser une fonction flèche :
myarray.days.forEach((obj, index) => {
console.log('before transform, this : ' + this);
this.datePipe.transform...
});
Ou utilisez la méthode bind :
myarray.days.forEach(function(obj, index) {
console.log('before transform, this : ' + this);
this.datePipe.transform...
}.bind(this));
La raison en est que lors du passage d'une fonction régulière en tant que rappel, lorsqu'elle est invoquée, this
n'est pas réellement conservé.
Les deux méthodes que j'ai mentionnées ci-dessus garantiront que la bonne portée this
est préservée pour la future exécution de la fonction.
Ajoutez le this
comme paramètre de rappel.
L'ajout de }, this);
Au lieu de }.bind(this));
devrait résoudre le problème dans Angular.
Ainsi, devrait ressembler à:
myarray.days.forEach(function(obj, index) {
console.log('before transform, this : ' + this);
this.datePipe.transform...
}, this);
Essaye ça:
myarray.days.forEach( (obj) => {
console.log('before transform, this : ' + this);
this.datePipe.transform...
});