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 相关文章推荐
Div Select挡住的解决办法
Aug 07 Javascript
javascript 继承实现方法
Aug 26 Javascript
jQuery插件 tabBox实现代码
Feb 09 Javascript
javascript中的继承实例代码
Apr 27 Javascript
jQuery函数的等价原生函数代码示例
May 27 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
jQuery Tree Multiselect使用详解
May 02 jQuery
react native带索引的城市列表组件的实例代码
Aug 08 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
Oct 19 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
深入浅析vue全局环境变量和模式
Apr 28 Javascript
Vue ​v-model相关知识总结
Jan 28 Vue.js
微信小程序服务器日期格式化问题
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代码
2007/03/03 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
puppeteer库入门初探
2019/01/09 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
python使用socket远程连接错误处理方法
2015/04/29 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
详解Python sys.argv使用方法
2019/05/10 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
Python定义一个函数的方法
2020/06/15 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
应届毕业生求职信
2013/11/30 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
赤壁观后感(2)
2015/06/15 职场文书