解决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自动判断浏览器分辨率的代码
Jan 28 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
May 09 Javascript
javascript + jquery实现定时修改文章标题
Mar 19 Javascript
JavaScript对象之深度克隆介绍
Dec 08 Javascript
javascript内置对象操作详解
Feb 04 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
js+css简单实现网页换肤效果
Dec 29 Javascript
JavaScript设计模式经典之工厂模式
Feb 24 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
探索Vue.js component内容实现
Nov 03 Javascript
Angular.js中数组操作的方法教程
Jul 31 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 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生成百度sitemap站点地图类函数实例
2014/10/17 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
php强制下载文件函数
2016/08/24 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
银行类自荐信
2014/02/04 职场文书
授权委托书格式
2014/07/31 职场文书
公司2014年度工作总结
2014/12/10 职场文书
西岭雪山导游词
2015/02/06 职场文书
物业保安辞职信
2015/05/12 职场文书
电影红河谷观后感
2015/06/11 职场文书
跳高加油稿
2015/07/21 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技