Ответ 1
Попробуйте следующее: setTimeout(this.fetchHole, 1000)
, потому что this
в анонимной функции прикрепляется к этой анонимной функции не к вашей основной функции
как я могу использовать функцию settimeout() в методе vuejs?
Я уже пробовал что-то вроде этого, но он не работает
fetchHole: function () {
//get data
},
addHole: function () {
//my query add new
setTimeout(function () { this.fetchHole() }, 1000)
},
Я получаю это сообщение об ошибке: Uncaught TypeError: this.fetchHole is not a function
Попробуйте следующее: setTimeout(this.fetchHole, 1000)
, потому что this
в анонимной функции прикрепляется к этой анонимной функции не к вашей основной функции
Добавьте вызов bind()
к объявлению функции:
setTimeout(function () { this.fetchHole() }.bind(this), 1000)
чтобы ваш компонент Vue this
был доступен внутри функции.
Боковое примечание: принятый ответ @nospor является более чистым в этой конкретной ситуации. Подход bind
немного более обобщен - очень полезно, если вы хотите сделать анонимную функцию, например.
Классическая проблема с контекстным this
в JavaScript.
Следующая часть кода показывает простое решение - если вы используете ES6 с Vuejs (конфигурация по умолчанию с vuecli y babel). Используйте функцию стрелки
setTimeout(()=>{
this.yourMethod()
},1000);
Функция стрелки не имеет своего собственного
this
. Значениеthis
используется окружающая лексическая область;
Я думаю, что это тоже работает.
var self = this;
setTimeout(function () { self.fetchHole() } , 1000)
Вызов рекурсивный с TimeOut:
save: function () {
this.progressToProced = 0
this.progress()
},
progress: function () {
if (this.progressToProced < 100) {
this.progressToProced++
setTimeout(function () { this.progress() }.bind(this), 100)
}
}
Способ связать this
с функцией setTimeout
, которая еще не упоминалась.
setTimeout(() => { this.fetchHole() },1000)(this)
Вы можете попробовать:
addHole:function(){
let vm = this
setTimeout(function(){vm.fetchHole()}, 1000)
}