在网上看到一篇Vue中使用定时器setInterval和setTimeou讲解得很好,但是放在自己代码中却不能实现定时器的作用,后来了解到是因为vue中要用箭头函数才能使setInterval起作用
解决方案
1 | this.timer = setInterval(this.get, 1000); |
修改为
1 2 3 4 5 | var _this = this; //注意,要有,因为有箭头函数所以this作用域不在是vue,而是定时器。我们要调用的是vue中的函数 this.timer = setInterval(() => { _this.get(); }, 3000); }, |
完整代码(建议细看代码注释)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <template> <section> <h1>hello world~</h1> </section> </template> <script> export default { data() { return { timer: '', value: 0 }; }, methods: { get() { this.value ++; console.log(this.value); } }, mounted() { //这行代码是不起用的,错误的 this.timer = setInterval(this.get, 1000); //以下才正确 var _this = this; //注意,要有,因为有箭头函数所以this作用域不在是vue,而定时器。我们要调用的是vue中的函数 this.timer = setInterval(() => { _this.get(); }, 3000); }, //注意,必须在页面销毁前关闭定时器,否则定时器会一直存在,一直进行操作,以前就遇到定时器没清除,造成浏览器内存溢出,内存占到89%,找了很久才找到原因 beforeDestroy() { clearInterval(this.timer); } }; </script> |