Vuejs2 将事件从嵌套子级传递到Vue中的父级

Vuejs2 将事件从嵌套子级传递到Vue中的父级,vuejs2,vue-component,vuex,Vuejs2,Vue Component,Vuex,我正在开发一个Vue组件,该组件将在不同的项目中重复使用(并将通过npm install…)提供),主要问题是如何处理事件发射 组件本身包含几个嵌套的子元素,如: component-parent |-child 1 |-child 2 |-child 3 |-child 4 当组件包含在某个项目中时,组件父级将公开从整个组件发出的所有事件。并且正在考虑如何将组件内事件传递给组件父级。例如,如果我想将事件从child 4传递到component paren

我正在开发一个Vue组件,该组件将在不同的项目中重复使用(并将通过
npm install…
)提供),主要问题是如何处理事件发射

组件本身包含几个嵌套的子元素,如:

component-parent
  |-child 1
  |-child 2
      |-child 3
         |-child 4
当组件包含在某个项目中时,
组件父级
将公开从整个组件发出的所有事件。并且正在考虑如何将组件内事件传递给
组件父级
。例如,如果我想将事件从
child 4
传递到
component parent
,那么
child 4
将发送到
child 3
,该子3将发送到
child 2
,最后发送到
component parent

这样的工作流程运行良好,但看起来不太实用

我发现可以使用
EventBus
,这似乎是一个更优雅的解决方案,但它似乎不是很受欢迎。
EventBus
是否可以自由使用,或者它被认为是一种有点老套的解决方法


还有一个关于使用
vuex
的问题。如果组件本身中包含
vuex
,是否可以将其发射到项目组件(包含我的组件)?在我的组件中包含
vuex
将导致主项目有两个
vuex
实例。有这样的多个存储的拦截器吗?

经过一些测试,我决定使用
EventBus
<代码>事件总线允许在组件之间发送/接收事件。组件可以是同一父树的一部分,也可以位于完全不同的父树上。更多信息

但通常应该创建
event bus.js
文件

import Vue from 'vue';
export const EventBus = new Vue();
然后导入将使用
EventBus
机制的任何组件中

<script>
// Import the EventBus we just created.
import { EventBus } from './event-bus.js';
...
任何加载了
EventBus
的组件都可以侦听以下事件:

EventBus.$on('i-got-clicked', clickCount => {
  console.log(`Oh, that's nice. It's gotten ${clickCount} clicks! :)`)
});
要停止侦听事件,请执行以下操作:

EventBus.$off('i-got-clicked');

我个人觉得
EventBus
非常简单和有用,但我可能只在开发其他项目中包含的组件时才使用它们。对于相同的项目组件,
Vuex
已经足够了

经过一些测试,我决定使用
EventBus
<代码>事件总线允许在组件之间发送/接收事件。组件可以是同一父树的一部分,也可以位于完全不同的父树上。更多信息

但通常应该创建
event bus.js
文件

import Vue from 'vue';
export const EventBus = new Vue();
然后导入将使用
EventBus
机制的任何组件中

<script>
// Import the EventBus we just created.
import { EventBus } from './event-bus.js';
...
任何加载了
EventBus
的组件都可以侦听以下事件:

EventBus.$on('i-got-clicked', clickCount => {
  console.log(`Oh, that's nice. It's gotten ${clickCount} clicks! :)`)
});
要停止侦听事件,请执行以下操作:

EventBus.$off('i-got-clicked');
我个人觉得
EventBus
非常简单和有用,但我可能只在开发其他项目中包含的组件时才使用它们。对于相同的项目组件,
Vuex
就足够了