关于vue组件通信方式的总结 | 青训营笔记

45 阅读2分钟

这是我参与【第四届青训营】笔记创作活动的第1天

组件之间的关系

组件通信是就是指组件之间的数据共享,而不同组件的组件关系有着不同的组件通信方式 在项目开发中,组件之间的关系分为如下3种

  1. 父子关系
  2. 兄弟关系
  3. 后代关系

image.png

其中,像AB属于父子关系 AD这种属于后代关系 其余像BE这种不在同一条链上的均归为兄弟关系

父子之间的数据共享

父子组件之间的数据共享又分为:

父 -> 子 共享数据

父组件通过v-bind属性绑定向子组件共享数据。同时,子组件需要使用props接收数据。示例代码如下

image.png

子 -> 父 共享数据

子组件通过自定义事件的方式向父组件共享数据 子组件需要通过emits节点来声明自定义事件,然后在特定的时机通过$emit方法来触发自定义事件,并且把数据传过去

父组件则需要通过v-on指令来监听自定义事件,并且通过形参来接收子组件传过来的数据 实例代码如下

image.png

兄弟之间的数据共享

兄弟组件之间实现数据共享的方案是EventBus。代码实例如图所示

image.png

使用步骤:

  1. 创建eventBus.js模块,并向外共享一个Vue实例
  2. 发送方:调用bus.$emit来触发自定义事件,并且把数据传过去
  3. 接收方:调用bus.$on来注册自定义事件,并且通过形参来接收数据

父节点和后代之间的数据共享

后代关系组件之间共享数据,指的是父节点的组件向其子组件共享数据。

父组件通过provide方法,对其子组件共享数据 image.png

子孙节点可以使用inject数组,接收父级节点向下共享的数据

image.png

但这样子孙组件获得的数据不是响应式数据,若要获得响应式数据,父级节点的组件还需要结合computed函数向下共享响应式数据,而子孙组件必须以.value的形式进行使用,。代码实例如下

image.png image.png

全局数据共享vuex

前面所讲的几种组件通信方式适合小范围的组件通信,而当项目庞大起来,前面的通信方式就会显得有点繁琐,此时可通过vuex来实现,下图只是vuex的原理

image.png