解决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 相关文章推荐
学习ExtJS border布局
Oct 08 Javascript
jquery 单击li防止重复加载的实现代码
Dec 24 Javascript
js 遍历对象的属性的代码
Dec 29 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
Dec 17 Javascript
js判断横竖屏及禁止浏览器滑动条示例
Apr 29 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
Sep 21 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
Webpack设置环境变量的一些误区详解
Dec 19 Javascript
AJAX检测用户名是否存在的方法
Mar 24 Javascript
教你部署vue项目到docker
Apr 05 Vue.js
JavaScript实现简单的音乐播放器
Aug 14 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
一个oracle+PHP的查询的例子
2006/10/09 PHP
BBS(php & mysql)完整版(三)
2006/10/09 PHP
基于php无限分类的深入理解
2013/06/02 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
中学教师请假制度
2014/02/03 职场文书
少年闰土教学反思
2014/02/22 职场文书
校园环保建议书
2014/05/14 职场文书
环境保护标语
2014/06/20 职场文书
作弊检讨书范文
2015/05/06 职场文书
门球健将观后感
2015/06/16 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL