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 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
浅谈jQuery中事情的动态绑定
Feb 12 Javascript
详解Vue-cli代理解决跨域问题
Sep 27 Javascript
JS设计模式之命令模式概念与用法分析
Feb 06 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
Apr 22 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/02/22 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
php数据序列化测试实例详解
2017/08/12 PHP
php中如何执行linux命令详解
2018/11/06 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
js实现简单点赞操作
2020/03/17 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
Python如何将字符串转换为日期
2020/07/31 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
计算机应届毕业生自荐信范文
2014/02/23 职场文书
团日活动总结
2014/04/28 职场文书
诉讼授权委托书
2014/10/15 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
python获取带有返回值的多线程
2022/05/02 Python
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL