Vue程序化的事件监听器(实例方案详解)


Posted in Javascript onJanuary 07, 2020

 某些第三方插件必须在当前组件卸载后清除该实例(比如说百度的富文本框UEditor 如果不清除再次在下个组件使用时会有bug, 类似于小程序的语音实例,必须离开页面的时候销毁当前语音实例,不然语音会一直播放)

方案1:

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

然后这样使用定时器:

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

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

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

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

(1)它需要在这个组件实例中保存这个数据timer,这是多余的。
(2)我们的建立定时器代码独立于我们的清理代码(定时器需要卸载页面的时候卸载),这使得我们比较难于程序化的清理我们建立的所有东西(意思是执行代码和清除代码不在一起)。

方案2: 该方法是通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时器。以下是完整代码:

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

简单来说就是把所有创建实例和需要销毁的实例代码放在一起了,放在一起而已(创建实例和销毁实例)……..

甚至可以在一个页面开启多个这种创建实例和销毁实例

mounted: function () {
 this.attachDatepicker('startDateInput')
 this.attachDatepicker('endDateInput')
},
methods: {
 attachDatepicker: function (refName) {
  var picker = new Pikaday({
   field: this.$refs[refName],
   format: 'YYYY-MM-DD'
  })

  this.$once('hook:beforeDestroy', function () {
   picker.destroy()
  })
 }
}

综合来说,我们更推荐使用方案2,使得代码可读性更强,一目了然。如果不清楚 $once、$on、$off 的使用。

总结

以上所述是小编给大家介绍的Vue程序化的事件监听器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript SocialHistory 检查访问者是否访问过某站点
Aug 02 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
Javascript浅谈之this
Dec 17 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
Jan 14 Javascript
利用Angularjs和bootstrap实现购物车功能
Aug 31 Javascript
Angularjs的启动过程分析
Jul 18 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
详解ES6语法之可迭代协议和迭代器协议
Jan 13 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
vue项目实现多语言切换的思路
Sep 17 Javascript
微信小程序服务器日期格式化问题
Jan 07 #Javascript
webpack 最佳配置指北(推荐)
Jan 07 #Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 #Javascript
vue实现数据控制视图的原理解析
Jan 07 #Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 #Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 #Javascript
小程序跨页面交互的作用与方法详解
Jan 07 #Javascript
You might like
php 学习资料零碎东西
2010/12/04 PHP
php设置编码格式的方法
2013/03/05 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
轻松实现php文件上传功能
2017/02/17 PHP
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
python代码制作configure文件示例
2014/07/28 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
python操作kafka实践的示例代码
2019/06/19 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python实现汇率转换操作
2020/05/03 Python
欢迎横幅标语
2014/06/17 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL