Vue开发遇坑记--事件总线

679 阅读1分钟

事件总线 初次传值监听不到

  1. 场景:原来A页面 点击选择群聊按钮 弹出对话框。对话框封装了dialog组件,与A页面父子传值

  2. 变动:产品一句把对话框改成新页面,而不是弹窗 打算改变上述逻辑 新建了一个路由,变为事件总线来传值...

❓ 问题一: A页面Bus.$emit触发 B页面Bus.$on方法,再跳转到B页面。 第一次跳转没触发监听,返回后再去才触发

💬 原因:on是一个注册行为,事件需要注册后才能被emit触发 ,在A页面第一次emit的时候,B页面的on还没有注册,【emit先于on执行】,自然无法监听到事件

解决:给触发的$emit外面套一个定时器 ,让A页面延迟发射触发事件。 setTimeout(()=>{ emit触发函数写这里 },0)

事件总线 传值问题被覆盖

❓ 问题二: A页面需要数据回写所以created中调用了初始化的函数,每次B页面选择完群聊点击确认 跳回到A页面,虽然数据成功传到A了,但是A中created的初始化函数又会被触发一次 会把传过来的数据覆盖住了

image.png

对于上述问题 暂时没想到特别好的直接解决方法(如果有大佬能提供十分感谢!) 所以换了一个解决思路👇绕开了事件总线的传值

不建路由跳转,而是采用父子组件 v-if/v-else 切换渲染,这样只触发created一次。