关于vue的event bus遇到的坑

记录一个在工作中实际遇到的问题。

问题描述:

昨天遇到了一个奇怪的问题,自己写的复制粘贴功能,竟然黏贴多次。复现步骤:打开报表设计,然后进入订单打印一次,再回到报表设计此时进行复制黏贴就会出现黏贴多次。

根据自己猜测,可能是什么元素影响了点击事件导致了触发了两次。于是进行试验:通过在对象的代码位置加上输出日志,发现实际只触发了一次事件,但是bus的$on的处理函数却执行了两次。于是排除了点击事件的原因,这时候需要靠google进行搜索,发现是vue的event总线的锅,其实也是自己的锅,由于event bus是全局的,不会随着组件的销毁而自动销毁组件上监听的事件,这也就说明了为什么在设计时不会出现这样的状况,需要进行打印后重新打开设计页面才会出现这个bug,所以在重新打开设计窗口则导致了$on重新注册了一次,那一旦去触发便会多个都响应了。解决办法就是在组件beforeDestroy生命周期中使用$off对这些事件进行移除。更具体解释可以参考我google到的一篇文章:参考文章

-------------本文结束感谢您的阅读-------------