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 相关文章推荐
基于jquery的监控数据是否发生改变
Apr 11 Javascript
JavaScript判断DOM何时加载完毕的技巧
Nov 11 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
Dec 04 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
Jul 26 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
Aug 31 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
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
微信小程序实现弹出菜单
2018/07/19 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
Python文件和流(实例讲解)
2017/09/12 Python
详解django三种文件下载方式
2018/04/06 Python
Python之文字转图片方法
2018/05/10 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
python 实现Harris角点检测算法
2020/12/11 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
.net C#面试题
2012/08/28 面试题
入党自我评价优缺点
2014/01/25 职场文书
安全生产检查通报
2014/01/29 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
关爱留守儿童标语
2014/06/18 职场文书
大四毕业生自荐书
2014/07/05 职场文书
布达拉宫导游词
2015/02/02 职场文书