发布博文
随想
读书
音乐
其他
我想爱,想吃,还想在一瞬间变成天上半明半暗的云。
我想爱,想吃,还想在一瞬间变成天上半明半暗的云。
我想爱,想吃,还想在一瞬间变成天上半明半暗的云。
我想爱,想吃,还想在一瞬间变成天上半明半暗的云。

vue异步方法中无法获取到变量

959
高光翔
2018-08-09 17:25

timg (1).jpg

      vue.js中如果异步执行方法,那么直接使用this.+变量名字的方法是没有办法取到vue中已经定义的变量的。如果引用了第三方的js库,在回调函数中用到了vue中定义的变量,而报错没有取到变量的话(Uncaught TypeError: Cannot read property '...' of undefined),不妨考虑下这种可能性,看一下封装的第三方插件库是否有异步执行的代码,如setTimeOut,setInterval等。下面我们就介绍下这个问题的解决办法。

data(){
return {
       myName:’高光翔’
    }
},
methods:{
   callMyName:function(){
       setTimeout(function () {
            console.log(this.myName);
        }, 3000);
   }
}

      如果直接按照上面的方法写,因为setTimeout是异步执行的,这样是没办法获取到this.myName这个变量的,页面会报Uncaught TypeError: Cannot read property 'myName' of undefined的错误。这个时候需要先把this赋给一个变量,然后再引用,正确的代码如下。

data(){
return {
       myName:’高光翔’
    }
},
methods:{
   callMyName:function(){
     let temp=this;
       setTimeout(function () {
            console.log(temp.myName);
        }, 3000);
   }
}



Insert title here Insert title here
打  赏