如何在 Vue 3 中创建事件总线?
在 Vue 2 中,它是:
export const bus = new Vue();
bus.$on(...)
bus.$emit(...)
In Vue 3, Vue
is not a constructor anymore, and Vue.createApp({});
returns an object that has no $on
and $emit
methods.
原文由 KeyKi 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如官方 文档 中所建议的,您可以使用 mitt 库在组件之间调度事件,假设我们有一个侧边栏和
header
包含一个关闭/打开侧边栏的按钮,我们需要该按钮来切换某些属性在侧边栏组件内部:在 main.js 中导入该库并创建该发射器的实例并定义为 全局属性:
安装 :
用法 :
在标头中发出带有一些有效负载的
toggle-sidebar
事件:在侧边栏中接收带有有效负载的事件:
对于那些使用 composition api 的人,他们可以使用
emitter
如下:创建一个文件 src/composables/useEmitter.js
从那里您可以使用
useEmitter
就像使用useRouter
一样:使用组合 API
您还可以从新的组合 API 中受益并定义一个可组合的事件总线:
事件总线.js
在组件 A 中:
在组件 B 中: