两个问题:
- 问题1: 为什么第一次触发的时候页面B中的on事件没有被触发
- 问题2: 为什么后面再一次依次去触发的时候会出现,每一次都会发现好像之前的on事件分发都没有被撤销一样,导致每一次的事件触发执行越来越多。
问题一
第一次触发的时候页面B中的on事件没有被触发
产生原因
当我们还在页面A的时候,页面B还没生成,也就是页面B中的 created中所监听的来自于A中的事件还没有被触发。这个时候当你A中emit事件的时候,B其实是没有监听到的。
解决办法
我们可以把A页面组件中的emit事件写在beforeDestory中去。因为这个时候,B页面组件已经被created了,也就是我们写的on事件已经触发了,所以可以在beforeDestory的时候, on事件已经触发了,所以可以在beforeDestory的时候,on事件已经触发了,所以可以在beforeDestory的时候,emit事件
问题二
后面再一次依次去触发的时候会出现,每一次都会发现好像之前的on事件分发都没有被撤销一样,导致每一次的事件触发执行越来越多。
产生原因
就是说,这个$on事件是不会自动清楚销毁的,需要我们手动来销毁。(不过我不太清楚这里的external bus 是什么意思,有大神能解答一下的吗,尤大大也提到如果是注册的是external bus 的时候需要清除)
解决办法
在B组件页面中添加Bus.$off来关闭

本文详细探讨了使用Vue中央事件总线时遇到的两个问题:1) 第一次触发时页面B的on事件未被触发,原因是页面B还未创建;2) 后续触发事件导致执行次数增多,由于$on事件不会自动清除。解决办法包括将A页面的emit事件放在beforeDestroy中,以及在B页面添加Bus.$off来关闭事件监听。在使用事件总线传递数据时,应注意组件A的事件触发时机和组件B的事件清理。
最低0.47元/天 解锁文章
1619

被折叠的 条评论
为什么被折叠?



