wie kann ich die Funktion settimeout () in einer vuejs-Methode verwenden?
Ich habe sowas schon probiert, aber es funktioniert nicht
fetchHole: function () {
//get data
},
addHole: function () {
//my query add new
setTimeout(function () { this.fetchHole() }, 1000)
},
Ich erhalte folgende Fehlermeldung: Uncaught TypeError: this.fetchHole is not a function
Versuchen Sie Folgendes: setTimeout(this.fetchHole, 1000)
, da this
in der anonymen Funktion dieser anonymen Funktion nicht an Ihre Hauptfunktion angehängt ist
Fügen Sie Ihrer Funktionsdeklaration einen Aufruf bind()
hinzu:
setTimeout(function () { this.fetchHole() }.bind(this), 1000)
damit ist die this
Ihrer Vue-Komponente innerhalb der Funktion verfügbar.
Randbemerkung: Die akzeptierte Antwort von @nospor ist in dieser speziellen Situation sauberer. Der bind
-Ansatz ist etwas verallgemeinert - sehr nützlich, wenn Sie zum Beispiel eine anonyme Funktion ausführen möchten.
Das klassische Problem mit kontextabhängiger this
in JavaScript.
Der folgende Teil des Codes zeigt eine einfache Lösung - wenn Sie ES6 mit Vuejs verwenden (Standardkonfiguration mit vuecli y babel). Verwenden Sie eine Pfeilfunktion
setTimeout(()=>{
this.yourMethod()
},1000);
Ich denke das funktioniert auch.
var self = this;
setTimeout(function () { self.fetchHole() } , 1000)
Rekursiv mit TimeOut aufrufen:
save: function () {
this.progressToProced = 0
this.progress()
},
progress: function () {
if (this.progressToProced < 100) {
this.progressToProced++
setTimeout(function () { this.progress() }.bind(this), 100)
}
}