如何在vueJs方法中设置超时

JavaScript

乐米亚

2020-03-12

如何在vuejs方法中使用settimeout()函数?

我已经尝试过类似的方法,但是没有用

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

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

我收到此错误消息: Uncaught TypeError: this.fetchHole is not a function

第888篇《如何在vueJs方法中设置超时》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

6个回答
小哥Jim 2020.03.12

尝试以下操作:setTimeout(this.fetchHole, 1000)因为this在匿名函数中,该匿名函数是附加到该匿名函数的,而不是附加到您的主要函数

梅米亚 2020.03.12

你可以试试 :

addHole:function(){
  let vm = this
  setTimeout(function(){vm.fetchHole()}, 1000)
}

小卤蛋十三 2020.03.12

thisJavaScript中上下文相关的经典问题

以下代码部分显示了一种简单的解决方案-如果您将ES6与Vuejs一起使用(带有vuecli y babel的默认配置)。使用箭头功能

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

箭头函数没有自己的this使用this封闭词法范围值;

箭头功能-JavaScript | MDN

Eva猿 2020.03.12

我认为这也可行。

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

bind()向您的函数声明添加调用:

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

这样您this就可以在函数中访问Vue组件

旁注:在这种特殊情况下,@ nospor可接受的答案更干净。这种bind方法较为通用-例如,如果您想执行匿名功能,则非常有用。

西门十三LEY 2020.03.12

用TimeOut递归调用:

    save: function () {
      this.progressToProced = 0
      this.progress()          
    },
    progress: function () {
      if (this.progressToProced < 100) {
        this.progressToProced++
        setTimeout(function () { this.progress() }.bind(this), 100)
      }
    }

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android