解决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 相关文章推荐
JS冒泡事件的快速解决方法
Dec 16 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
Dec 05 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
JavaScript定义函数_动力节点Java学院整理
Jun 27 Javascript
vue用addRoutes实现动态路由的示例
Sep 15 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
Sep 23 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
原生JS中应该禁止出现的写法
May 05 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中路径问题的解决方案
2006/10/09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
php session劫持和防范的方法
2013/11/12 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python定时关机小脚本
2018/06/20 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
Python中url标签使用知识点总结
2020/01/16 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
《小松树和大松树》教学反思
2014/02/20 职场文书
《满井游记》教学反思
2014/02/26 职场文书
财务科科长岗位职责
2014/03/10 职场文书
党员先进事迹材料
2014/12/19 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
Redis keys命令的具体使用
2022/06/05 Redis