2016-05-26 12 views
10

come utilizzare la funzione settimeout() in un metodo vuejs?come impostare il timeout in un metodo vueJs

ho già provato qualcosa di simile, ma non funziona

fetchHole: function() { 
    //get data 
}, 

addHole: function() { 
    //my query add new 
    setTimeout(function() { this.fetchHole() }, 1000) 
}, 

ottengo questo messaggio di errore: Uncaught TypeError: this.fetchHole is not a function

+0

Prova questo: 'setTimeout (this.fetchHole, 1000)' – nospor

+0

Nizza grazie @nospor – user3757488

+0

Ho spinto il mio commento come risposta così ora è possibile contrassegnare la questione risolta – nospor

risposta

16

Prova questo: setTimeout(this.fetchHole, 1000) perché this in funzione anonima viene assegnata a quella anonima funzione non per la funzione principale

25

Aggiungi una chiamata bind() alla dichiarazione di funzione:

in modo che il componente Vue this sia accessibile all'interno della funzione.

Nota a margine: la risposta accettata di @nospor è più pulita in questa particolare situazione. L'approccio bind è un po 'più generalizzato, molto utile se si desidera, ad esempio, eseguire una funzione anonima.

0

Penso che funzioni anche questo.

var self = this; 
setTimeout(function() { self.fetchHole() } , 1000) 
6

Il classico problema con this contestuale in JavaScript.

La seguente parte di codice mostra una soluzione semplice - se si utilizza ES6 con Vuejs (configurazione predefinita con vuecli y babel). Utilizzare una funzione di freccia

setTimeout(()=>{ 
    this.yourMethod() 
},1000); 
+0

** questo ** è come lo fai –

Problemi correlati