Vue 组件通信的几种方式

March 22, 2020

Prop 和 事件回调

父组件通过 prop 向子组件传递数据

<post title="hello"></post>

子组件通过自定义事件向父组件传递数据

<!-- 子组件触发 -->
<button v-on:click="$emit('hello')">
    Click me to be welcomed
</button>
<!-- 父组件监听 -->
<example v-on:hello="world"></example>

Vuex

复杂项目可以使用 Vuex 进行状态管理,配合 vue-devtools 能够更好的追踪状态。

单独的事件管理中心 EventBus

单独使用一个 Vue 实例来管理事件 文档的例子,但是在复杂的场景下,事件的触发和监听可能散落在各个地方,不利于维护,更推荐使用 Vuex

依赖注入 provideinject

类似 React 里面的 context,相当于大范围有效的 prop。文档的例子 ,在项目中使用不多。

访问组件实例

$root 属性用来从一个子组件访问根组件的实例,$parent 属性访问父组件的实例。不利于组件解耦,不推荐使用。

总结

方案 适用场景 是否推荐使用
Prop 父子组件 推荐
Vuex 单元格 推荐
EventBus 任意组件之间 复杂项目不推荐
依赖注入 子孙组件之间 复杂项目不推荐

Profile picture

Written by xiaohai who lives and works in ShenZhen, building useful things.