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 相关文章推荐
JQuery 学习笔记01 JQuery初接触
May 06 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
Oct 11 Javascript
三种带箭头提示框总结实例
Jun 14 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
Sep 18 Javascript
JavaScript如何实现元素全排列实例代码
May 14 Javascript
原生js实现3D轮播图
Mar 21 Javascript
微信小程序实现左侧滑动导航栏
Apr 08 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP 文件系统详解
2012/09/13 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
php 猴子摘桃的算法
2017/06/20 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python rstrip()方法实例详解
2018/11/11 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
化工工艺专业求职信
2013/09/22 职场文书
热能动力工程毕业生自荐信
2013/11/07 职场文书
运动会开幕式解说词
2014/02/05 职场文书
村创先争优活动总结
2014/08/28 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
公司周年庆典标语
2014/10/07 职场文书
企业整改报告范文
2014/11/08 职场文书
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS