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 相关文章推荐
神奇的7个jQuery 3D插件整理
Jan 06 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
Apr 01 Javascript
Javascript计算时间差的函数分享
Jul 04 Javascript
javascript针对DOM的应用分析(二)
Apr 15 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
基于Jquery实现万圣节快乐特效
Nov 01 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
Jquery树插件zTree实现菜单树
Jan 24 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
解决vue.js提交数组时出现数组下标的问题
Nov 05 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
PHP学习之字符串比较和查找
2011/04/17 PHP
php去除HTML标签实例
2013/11/06 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
JS正则表达式验证密码强度
2020/03/18 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
python简单获取数组元素个数的方法
2015/07/13 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
如何执行一个shell程序
2012/11/23 面试题
机械专业个人求职自荐信格式
2013/09/21 职场文书
成教自我鉴定
2013/10/27 职场文书
函授毕业生自我鉴定
2013/11/06 职场文书
建筑公司文秘岗位职责
2013/11/29 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python