我在这里找到了LinusBorg的解决方案,该解决方案在任何Vue实例中全局注册了总线。有没有一种方法可以在组件层次结构中定义它,以便我可以创建多个作用域总线?基本上,如果我有多个带有某些子级的“根”级组件,则应该为“根”级组件及其子级实例化一个事件总线,而不是所有Vue实例。
我不能使用简单的$emit
和$on
,因为层次结构不仅限于普通parent-child
通信。因此,事件必须在多个级别上传递。
您可以创建一个js文件,例如eventBus.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('domain/foo')
。
如果您觉得您的应用程序变得越来越复杂,那就去vuex吧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句