解决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 常用校验函数
Mar 26 Javascript
jQuery 动画弹出窗体支持多种展现方式
Apr 29 Javascript
js弹出div并显示遮罩层
Feb 12 Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 Javascript
AngularJS基础学习笔记之表达式
May 10 Javascript
jQuery on()方法示例及jquery on()方法的优点
Aug 27 Javascript
基于Jquery代码实现手风琴菜单
Nov 19 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
关于在mongoose中填充外键的方法详解
Aug 14 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
javascript Number 与 Math对象的介绍
Nov 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&java(二)
2006/10/09 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
js 替换
2008/02/19 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
js实现拖拽功能
2017/03/01 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
常用python编程模板汇总
2016/02/12 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
实例讲解python中的协程
2018/10/08 Python
Django实现跨域请求过程详解
2019/07/25 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
李宁官方网店:中国运动品牌
2017/11/02 全球购物
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
新年抽奖获奖感言
2014/03/02 职场文书
环保标语口号
2014/06/13 职场文书
公共场所标语
2014/06/30 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
颐和园导游词400字
2015/01/30 职场文书
法人代表证明书范本
2015/06/18 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android