解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题


Posted in Javascript onJuly 21, 2020

问题:

从第一个页面跳转到第二个页面后,如果停留在第二个页面,定时器还在运行。如果在两个页面之间来回跳转,跳转时间小于定时器的间隔时间时,也会出现重复创建setTimeout的情况。

原因:

当我们刷新页面时,会将当前页面之前创建的setTimeout以及其他定时器都清除掉,但是仅仅是路由切换是不会清除的。

data () {
  return {
   ct: null
  }
},
methods: {
 start() {
 this.ct= setTimeout( () => {that.countdown(end)}, 1000)
 }
 end() {
 clearTimeout(this.ct); //清除
 }
}

setInterval()计时也需要clearInterval()来清除

补充知识:小记VUE下setTimeOut和setInterval遇到的问题

相信大家对着两个函数都陌生,就是一个定时器,setTimeOut只执行一次,而setInterval会重复执行

需要注意的是:在setInterval不用的时候一定要用clearSetInterval关闭定时器。

说一下最近开发中遇到的问题,我是用vue开发的,顺便记录这个错误。

我需要轮询接口,所以使用setInterval。

// 我是想没2秒执行一次myFunc这个函数。
setInterval(this.myFunc(),2000)
//某个函数
myFunc () {
  console.log(123)
}

但实际的运行结果是,只执行了一遍,并没有循环执行。

原因是setInterval接受两个参数,第一个为要执行的函数,第二个为时间(毫秒)。

这里我犯的错误是,我写的是一个函数的执行this.myFunc() 因为加了()是一个执行,而不是个函数。

于是我又改成这样写了,在写个匿名函数,函数体是我要执行的。

setInterval(function () {
 this.myFunc()
},2000)
//某个函数
myFunc () {
  console.log(123)
}

理论上这样是没问题的,会每2秒执行一次this.myFunc(),但却报错了。

原因是 老生常谈的javaScript 的this 的问题。

因为用的一个function(){} 这里的 独立的作用域 this指向了全局(这里是window)而且window里没有myFunc这个函数,所报了错。

用过vue的朋友应该,基本vue中都是this.XXX这样写。这里的this是Vue对象。

所以为了使this正确指向vue,我用了ES6的尖头函数。

最终

setInterval(() => {
 this.myFunc()
},2000)
//某个函数
myFunc () {
  console.log(123)
}

尖头函数因为它的特殊性,它的this指向它外层的对象。

其实主要说的是第二个问题,第一个属于对函数不熟悉,第二个则是VUE,ES6,this指向综合的问题。

以上这篇解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让textarea控件的滚动条怎是位与最下方
Apr 20 Javascript
用js实现随机返回数组的一个元素
Aug 13 Javascript
js 判断js函数、变量是否存在的简单示例代码
Mar 04 Javascript
提取jquery的ready()方法单独使用示例
Mar 25 Javascript
jquery实现清新实用的网页菜单效果
Aug 28 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 Javascript
JavaScript undefined及null区别实例解析
Jul 21 #Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 #Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
Jul 21 #Javascript
vue 实现tab切换保持数据状态
Jul 21 #Javascript
vue通过过滤器实现数据格式化
Jul 20 #Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 #Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
Jul 20 #Javascript
You might like
多文件上载系统完整版
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
php中filter_input函数用法分析
2014/11/15 PHP
php面向对象值单例模式
2016/05/03 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
python2.7和NLTK安装详细教程
2018/09/19 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python实现猜数游戏
2020/03/27 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
会计专业求职信
2014/08/10 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
教师创先争优承诺书
2015/04/27 职场文书
2015年领导班子工作总结
2015/05/23 职场文书