comment puis-je utiliser la fonction settimeout () dans une méthode vuejs?
J'ai déjà essayé quelque chose comme ça, mais ça ne marche pas
fetchHole: function () {
//get data
},
addHole: function () {
//my query add new
setTimeout(function () { this.fetchHole() }, 1000)
},
Je reçois ce message d'erreur: Uncaught TypeError: this.fetchHole is not a function
Essayez ceci: setTimeout(this.fetchHole, 1000)
car this
dans la fonction anonyme est attaché à cette fonction anonyme et non à votre fonction principale
Ajoutez un appel bind()
à votre déclaration de fonction:
setTimeout(function () { this.fetchHole() }.bind(this), 1000)
afin que la variable this
de votre composant Vue soit accessible dans la fonction.
Note latérale: La réponse acceptée de @ nospor est plus propre dans cette situation particulière. L'approche bind
est un peu plus généralisée - très utile si vous voulez faire une fonction anonyme, par exemple.
Le problème classique avec la variable contextuelle this
en JavaScript.
La partie de code suivante montre une solution simple - si vous utilisez ES6 avec Vuejs (configuration par défaut avec vuecli y babel). Utiliser une fonction de flèche
setTimeout(()=>{
this.yourMethod()
},1000);
Je pense que cela fonctionne aussi.
var self = this;
setTimeout(function () { self.fetchHole() } , 1000)
Appel récursif avec TimeOut:
save: function () {
this.progressToProced = 0
this.progress()
},
progress: function () {
if (this.progressToProced < 100) {
this.progressToProced++
setTimeout(function () { this.progress() }.bind(this), 100)
}
}