vue.js - vuejs2 - 如何为单个文件组件层次结构创建事件总线

标签 vue.js vue-component

我找到了 LinusBorg 的解决方案 here ,它在任何 Vue 实例中全局注册一个总线。有没有办法在组件层次结构中定义它,以便我可以创建多个作用域总线?基本上,如果我有多个“根”级组件和一些子组件,则应该为“根”级组件及其子组件实例化一个事件总线,而不是所有 Vue 实例。

我不能使用简单的 $emit$on,因为层次结构不限于普通的 parent-child 通信.因此,事件必须经过多个级别。

最佳答案

你可以创建一个像eventBus.js这样的js文件,然后导出一个vue实例:

import Vue from 'vue'
const bus = new Vue()
export default bus

然后你可以在你的 .vue 文件中导入事件总线

import bus from 'path/to/eventBus'

...

bus.$on('foo', ...)

根据评论中的讨论更新我的答案:

由于事件名称只是一个字符串,您可以为事件添加前缀/命名空间,例如 bus.$emit('domain.foo')bus.$emit ('域/foo')

如果你觉得你的应用程序变得越来越复杂,就选择 vuex。

关于vue.js - vuejs2 - 如何为单个文件组件层次结构创建事件总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631741/

相关文章:

javascript - 有没有办法检测作用域插槽是否传递给组件?

javascript - 组件 : how to have all items selected by default? 中的 v-data-table

vue.js - Vue 为什么在组件上未定义 Prop

vue.js - Vue Trigger watch on mounted

vue.js - Vue.js将函数从父级传递到子级

javascript - Nuxt 插件抛出注入(inject)不是一个函数

vue.js - 如何在 Vue.js 中使用 bootstrap 轮播

vue-component - Vuejs 2 移动数组中的项目,不保留数组索引

javascript - VueJS - 如何在脚本标签中获取单个文件组件的实例

javascript - 使用 vue.js 显示 json 结果