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); } }