【问题标题】:How do I use setTimeout in Vue如何在 Vue 中使用 setTimeout
【发布时间】:2017-11-03 09:02:21
【问题描述】:

我是 Vue.js 的新手。如何在 Vue.js 中使用 setTimeout?

这里是我要超时的地方

dataReq.end((err, resp) => {
            resp = JSON.parse(resp.text)
            if (resp.status) {
              setTimeout(this.$router.push, 10000)(this.breadcrumbs[2].path)
            }
          })

【问题讨论】:

标签: vue.js


【解决方案1】:

你应该这样做:

dataReq.end((err, resp) => {
        resp = JSON.parse(resp.text)
        if (resp.status) {
          setTimeout(() => {
              this.$router.push(this.breadcrumbs[2].path);
          }, 10000)
        }
      })

setTimeout 将超时后执行的函数作为第一个参数,$router.push() 将路径作为参数,猜测this.breadcrumbs[2].path 是有效路径

【讨论】:

  • @user2486 这就是我使用箭头函数的原因。所以 this 是词法范围的
  • @WaldemarIce 你错了箭头函数在词法上绑定this 的上下文,所以它会起作用请看看这个小提琴; jsfiddle.net/3ujdud6c/1
  • 什么上下文包含setTimeout的环境?你不知道。由于 setTimeout 本身在箭头函数中被调用......整个例子是错误的......
  • @WaldemarIce 我们知道您对setTimeout 所说的封闭环境是get 请求的成功回调,它进一步包含在mounted 中,其中this 的值是vue 实例
  • @WaldemarIce 是的,我可以打赌,,,,这就是我提供一个工作小提琴链接的原因
【解决方案2】:

可能是你引用this有问题,试试这个。

dataReq.end((err, resp) => {
    resp = JSON.parse(resp.text);
    if (resp.status) {
        var vm = this;
        setTimeout(function() {
            console.log("Do somthing here");
            // this is now referencing to setTimeout function, so use vm referenced above
            console.log(vm.breadcrumbs[2].path);
        }, 100);
    }
});

【讨论】:

  • 是的。我对 Vue 中的 setTimeout / setInterval 没有任何问题。
  • @WaldemarIce:哦,对不起,我以为你是 OP
  • 我的问题?再次寻找问题作者:)
  • @WaldemarIce 你能说出为什么我的回答不起作用
  • 我不是 :) 你的回答会奏效。 Vamsi 的回答不是。他使用箭头函数作为回调 - 没有特定的上下文。
猜你喜欢
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2020-12-19
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多