Vue 组件间通信

1. 组件间通信的概念

指 Vue 项目中不同组件(如父子组件、兄弟组件、跨层级组件)之间传递数据、事件或状态的机制,是组件化开发中实现功能协同的基础。

2. 组件间通信解决了什么问题

  • 实现组件间的数据共享(如父子组件传递用户信息);
  • 完成组件间的行为联动(如子组件触发父组件的弹窗);
  • 解耦组件逻辑,让单个组件更独立、可复用。

3. 组件间通信的分类

按组件关系可分为三类:

  • 父子组件通信:最常见的通信场景(如父传子、子传父);
  • 兄弟组件通信:同一父组件下的子组件之间通信;
  • 跨层级 / 任意组件通信:非直接嵌套的组件(如爷孙组件、无关联组件)之间通信。

4. 组件间通信的方案(Vue2 常用)

通信场景 方案 说明
父→子 props 父组件通过属性传递数据,子组件用props接收
子→父 $emit + 自定义事件 子组件触发this.$emit('事件名', 数据),父组件通过@事件名监听
父子 / 跨层级 $parent / $children 直接访问父 / 子组件实例(不推荐,耦合性高)
跨层级 $attrs / $listeners 传递未被props接收的属性 / 事件,配合v-bind="$attrs"/v-on="$listeners"透传
跨层级 / 任意组件 Vuex 全局状态管理库,统一存储和修改数据
任意组件 事件总线(EventBus) 基于 Vue 实例的$on/$emit实现(Vue2 中需自行创建,如new Vue()
跨层级 provide / inject 父组件provide提供数据,后代组件inject注入(适用于深度嵌套场景)