解决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 相关文章推荐
Javascript图片上传前的本地预览实例
Jun 16 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
Jun 17 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 Javascript
Bootstrap源码解读按钮(5)
Dec 23 Javascript
javascript基础知识讲解
Jan 11 Javascript
jQuery实现鼠标跟随效果
Feb 20 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
基于vue-video-player自定义播放器的方法
Mar 21 Javascript
对 Vue-Router 进行单元测试的方法
Nov 05 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 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
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
解析vue中的$mount
2017/12/21 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
json跨域调用python的方法详解
2017/01/11 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
基于Django实现日志记录报错信息
2019/12/17 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
水果超市创业计划书
2014/01/27 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
大学生个人学习总结
2015/02/15 职场文书
一个都不能少观后感
2015/06/04 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏