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(一)工厂方式 js面象对象的定义方法
Dec 15 Javascript
改进版通过Json对象实现深复制的方法
Oct 24 Javascript
Javascript算符的优先级介绍
Mar 20 Javascript
AngularJS语法详解
Jan 23 Javascript
js动态生成form 并用ajax方式提交的实现方法
Sep 09 Javascript
jQuery右下角悬浮广告实例
Oct 17 Javascript
Javascript使用function创建类的两种方法(推荐)
Nov 19 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
Jan 21 Javascript
js+html制作简单验证码
Feb 16 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
Dec 09 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 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几个实用自定义函数小结
2016/01/25 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
PHP 8新特性简介
2020/08/18 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
python: 自动安装缺失库文件的方法
2018/10/22 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python日志模块logbook使用方法
2019/09/19 Python
python3爬取torrent种子链接实例
2020/01/16 Python
python Timer 类使用介绍
2020/12/28 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
销售会计工作职责
2013/12/02 职场文书
医院搬迁方案
2014/06/14 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
宿舍管理制度范本
2015/08/07 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
求职信如何撰写?
2019/05/22 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers