如何在 Vue 3 中设置全局事件总线
How to setup a Global Event bus in Vue 3
我正在创建一个 Vue 3 应用程序并尝试为两个组件实现全局事件总线以进行通信。过去 w/Vue 2
我会做以下事情:
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
export const bus = new Vue();
new Vue({
render: h => h(App),
}).$mount('#app')
现在 w/Vue 3 我知道新的 Vue 出来了,createApp() 进来了。因此我将总线设置为:
// main.js
import { createApp } from "vue";
import App from "./App.vue";
export const bus = createApp();
createApp(App).mount("#app");
而App.vue是:
<template>
<!-- ============== Modal Component ============= -->
<FormModal v-show="isModalVisible" @close="closeModal">
<template v-slot:header> Add Equipment Item to Scrap List </template>
</FormModal>
<!-- More template stuff -->
<DisplayScrap />
</template>
<script setup>
import { ref } from "vue";
import FormModal from "./components/form-modal.vue";
import DisplayScrap from "./components/display-scrap.vue";
现在,当我转到第一个组件(发射器)并尝试导入全局总线时:
// form.modal.vue
import { reactive, defineEmits, ref, toRaw } from "vue";
import addRow from "../helperFunctions/addRow.js";
import { bus } from "../main.js";
我现在在以下的控制台中收到错误消息:
Uncaught ReferenceError: 初始化前无法访问词法声明 'App'
http://localhost:3000/src/main.js?t=1640126294730:7
main.js:7:1
非常感谢任何关于在 Vue 3 中设置全局总线的正确方法的建议。我是否遗漏了一些导致错误的循环引用?对于这种情况,我在文档中没有看到任何示例...
首先是错误:
您是否尝试 export const bus = createApp();
在不同的文件中以避免循环引用?
关于vue3中的全局总线:
建议使用 vuex
提供的全局状态或任何外部包作为组件之间通信的最佳实践。
即使您设法导入创建的 bus
,您仍然没有侦听器 $on
来接收发出的数据。因为他们在 vue3
中删除了它
我正在创建一个 Vue 3 应用程序并尝试为两个组件实现全局事件总线以进行通信。过去 w/Vue 2 我会做以下事情:
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
export const bus = new Vue();
new Vue({
render: h => h(App),
}).$mount('#app')
现在 w/Vue 3 我知道新的 Vue 出来了,createApp() 进来了。因此我将总线设置为:
// main.js
import { createApp } from "vue";
import App from "./App.vue";
export const bus = createApp();
createApp(App).mount("#app");
而App.vue是:
<template>
<!-- ============== Modal Component ============= -->
<FormModal v-show="isModalVisible" @close="closeModal">
<template v-slot:header> Add Equipment Item to Scrap List </template>
</FormModal>
<!-- More template stuff -->
<DisplayScrap />
</template>
<script setup>
import { ref } from "vue";
import FormModal from "./components/form-modal.vue";
import DisplayScrap from "./components/display-scrap.vue";
现在,当我转到第一个组件(发射器)并尝试导入全局总线时:
// form.modal.vue
import { reactive, defineEmits, ref, toRaw } from "vue";
import addRow from "../helperFunctions/addRow.js";
import { bus } from "../main.js";
我现在在以下的控制台中收到错误消息:
Uncaught ReferenceError: 初始化前无法访问词法声明 'App' http://localhost:3000/src/main.js?t=1640126294730:7 main.js:7:1
非常感谢任何关于在 Vue 3 中设置全局总线的正确方法的建议。我是否遗漏了一些导致错误的循环引用?对于这种情况,我在文档中没有看到任何示例...
首先是错误:
您是否尝试
export const bus = createApp();
在不同的文件中以避免循环引用?关于vue3中的全局总线:
建议使用
vuex
提供的全局状态或任何外部包作为组件之间通信的最佳实践。即使您设法导入创建的
中删除了它bus
,您仍然没有侦听器$on
来接收发出的数据。因为他们在vue3