Vue清除定时器setInterval优化方案分享


Posted in Javascript onJuly 21, 2020

两种方案清除定时器,开发者经常使用方案1,建议使用方案2

方案1

首先我在data函数里面进行定义定时器名称:

data() {      
  return {               
    timer: null // 定时器名称     
  }    
},

然后这样使用定时器:

this.timer = (() => {
  // 某些操作
}, 1000)

最后在beforeDestroy()生命周期内清除定时器:

beforeDestroy() {
  clearInterval(this.timer);    
  this.timer = null;
}

方案1有两点不好的地方,引用尤大的话来说就是:

它需要在这个组件实例中保存这个 timer,如果可以的话最好只有生命周期钩子可以访问到它。这并不算严重的问题,但是它可以被视为杂物。

我们的建立代码独立于我们的清理代码,这使得我们比较难于程序化的清理我们建立的所有东西。

方案2

该方法是通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时器。

以下是完整代码:

const timer = setInterval(() =>{          
  // 某些定时器操作        
}, 500);      
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {      
  clearInterval(timer);                  
})

其他程序化的事件侦听器

通过 $on(eventName, eventHandler) 侦听一个事件

通过 $once(eventName, eventHandler) 一次性侦听一个事件

通过 $off(eventName, eventHandler) 停止侦听一个事件

附官网详细地址:程序化事件侦听器

补充知识:vue在mounted中创建定时器与清除定时器

我就废话不多说了,大家还是直接看代码吧~

mounted(){
   var that=this;
    var num = 1;
    var ss='';
   var a=setInterval(()=>{
    a+=10;
     if(this num===100){
      ss='success';
      console.log(ss)  
    			clearInterval(a)  //当num等于100时清除定时器
   } 
   }, 1000); 
  }

以上这篇Vue清除定时器setInterval优化方案分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
javascript权威指南 学习笔记之变量作用域分享
Sep 28 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
Mar 05 Javascript
javascript实现回到顶部特效
May 06 Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 Javascript
JavaScript实现多种排序算法
Feb 24 Javascript
Bootstrap布局方式详解
May 27 Javascript
js实现自动图片轮播代码
Mar 22 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
webgl实现物体描边效果的方法介绍
Nov 27 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 #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
You might like
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
多php服务器实现多session并发运行
2006/10/09 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
详解javascript对数组和json数组的操作
2019/04/15 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
python实现门限回归方式
2020/02/29 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
SQL面试题
2013/04/30 面试题
通用C#笔试题附答案
2016/11/26 面试题
经典促销广告词大全
2014/03/19 职场文书
环保建议书600字
2014/05/14 职场文书
在校证明模板
2015/06/17 职场文书
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL