组件间通信
在Vue中,组件间通信是一个核心概念,因为Vue的组件实例的作用域是独立的。这意味着不同组件之间的数据无法直接相互引用。为了解决这个问题,Vue提供了多种组件间通信的方法,适用于不同的场景,如父子组件通信、兄弟组件通信和跨级组件通信。
常用通信方式对比
方式 | 场景 | 实现 |
---|---|---|
props | 父组件传递数据给子组件 | 子组件设置 props 属性接收,父组件在子组件标签通过字面量传递值 |
$emit | 子组件传递数据给父组件 | 子组件通过 $emit 触发自定义事件 父组件绑定回调函数获取子组件传递的参数 |
$ref和$children(已废弃) | 父组件获取子组件引用 | 父组件通过设置子组件 ref 获取子组件实例对象上的数据/方法 |
$parent和$root | 祖先组件传递数据给子孙组件 | 兄弟组件通过 $parent.$emit 触发事件 另外的兄弟组件通过 $parent.$on 监听事件 |
$attrs和$listeners | 祖先组件传递数据给子孙组件 | $attrs 包含了父作用域中不作为props被识别的绑定 $listeners 包含了父作用域中的v-on事件监听器 |
provide 和 inject | 祖先组件传递数据给子孙组件 | 在祖先组件定义 provide 属性,返回传递的值 在后代组件通过 inject 接收组件传递过来的值 |
EventBus | 复杂关系组件传递数据 | 创建一个中央事件总线 一个组件通过 $emit 触发事件 一个通过 $on 接收事件 |
状态管理工具(Vuex) | 复杂关系组件传递数据 | 集中式存储管理应用的所有组件的状态 |