Je crée un composant avec Vue.js.
Lorsque je fais référence à this
dans l'un des crochets du cycle de vie ( created
, mounted
, updated
, etc.), il est évalué comme undefined
:
mounted: () => { console.log(this); // logs "undefined" },
La même chose se passe également dans mes propriétés calculées:
computed: { foo: () => { return this.bar + 1; } }
Je reçois l'erreur suivante:
Uncaught TypeError: Impossible de lire la propriété 'bar' de undefined
Pourquoi this
évaluation n'est- this
pas undefined
dans ces cas?
Ces deux exemples utilisent une fonction flèche () => { }
, ce qui lie this
à un contexte différent de l'instance Vue.
Selon la documentation :
N'utilisez pas les fonctions de flèche sur une propriété d'instance ou un rappel (p
vm.$watch('a', newVal => this.myMethod())
Exvm.$watch('a', newVal => this.myMethod())
). Comme les fonctions de la flèche sont liées au contexte parent,this
ne sera pas l'occurrence de Vue que vous attendez etthis.myMethod
sera indéfini.
Afin d'obtenir la référence correcte à this
tant qu'exemption Vue, utilisez une fonction régulière:
mounted: function () { console.log(this); }
Alternativement, vous pouvez également utiliser la sténographie ECMAScript 5 pour une fonction:
mounted() { console.log(this); }
Voir aussi Utilisation de "this" dans Vue .