定时器里不能写vue的代码?

一个创建账号页面,创建成果的话我就让他跳转到列表页。
我在定时器里写上页面跳转代码,但是不能执行。
如果去掉定时器就正常
这是什么原因呀

axios.post('/campaign/add',campaignEntity,{
    headers: {
        Authorization : getCookie('token'),
    },
})
.then(res=>{
    if(res.data.status == 1){
        this.$message({
            message: '创建成功',
            type: 'success',
            duration:1800
        });
        setTimeout(function()
        {
            alert(1111);  //能执行
            this.$router.push({path:"/campaign"}); //不能执行,说push未定义
        },1850)
    }
})
阅读 2.6k
5 个回答

this this this !

setTimeout(()=>{
    alert(1111);  //能执行
    this.$router.push({path:"/campaign"}); //不能执行,说push未定义
},1850)

this指向变了呀

改下代码试试:

setTimeout(() => {
    alert(1111);  //能执行
    this.$router.push({path:"/campaign"});
}, 1850)

setTimeout传递的不是箭头函数,而且你里面还写了this,函数在执行时,this指向了window,window是没有$router属性的。

解决方法:要么换成箭头函数,让this指向外层域中的this;要么在外层使用var self=this;函数内使用self变量调用self.$router...

作用域了解一下,在外部声明一个 let that = this;里面调用用that

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题