2016-05-26 4 views
10

Как я могу использовать функцию settimeout() в методе vuejs?Как установить таймаут в методе vueJs

Я уже пытался что-то вроде этого, но он не работает

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

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

Я получаю сообщение об ошибке: Uncaught TypeError: this.fetchHole is not a function

+0

Попробуйте это: 'SetTimeout (this.fetchHole, 1000)' – nospor

+0

Ницца благодаря @nospor – user3757488

+0

Я толкнул мой комментарий как ответ, так что вы можете теперь пометить свой вопрос, как решен – nospor

ответ

16

Попробуйте это: setTimeout(this.fetchHole, 1000) потому this в анонимной функции прилагается к тому, что анонимный функция не для вашей основной функции

25

Добавить bind() вызов функции:

setTimeout(function() { this.fetchHole() }.bind(this), 1000) 

, так что ваш компонент Vue this доступен в пределах функции.

Сторона примечания: принятый ответ @ nospor является более чистым в этой конкретной ситуации. Подход bind немного более обобщен - очень полезно, если вы хотите сделать анонимную функцию, например.

0

Я думаю, что это тоже работает.

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

Классическая проблема с в JavaScript контекстную this.

Следующая часть кода показывает простое решение - если вы используете ES6 с Vuejs (стандартная конфигурация с vuecli y babel). Используйте функцию стрелки

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

** это ** как вы это делаете –

Смежные вопросы