vue组件间通信

89 阅读2分钟

一:组件中通信的概念

组件通信即指组件(.vue)通过某种方式来传递信息已达到某种目的

vue中每一个组件都是一个单独的作用域,组件间的数据是无法共享的,但是实际开发中,是需要组件间的数据是共享的。

二:组件间通信的分类

  • 父子组件间的通信
  • 兄弟组件间的通信
  • 祖孙与后代组件间的通信
  • 非关系组件间的通信

三:组件间通信的方案

8个方案:
1,通过props传递
2,通过$emit()触发自定义事件
3,ref
4,EventBus
5,parent和root
6,attrs与listeners
7,Provide与Inject
8,Vuex

props传递数据
适用场景:父组件--》子组件
子组件设置props属性,定义接收父组件传递过来的参数
父组件在使用子组件标签中通过字面量来传递值

$emit触发自定义事件

适用场景: 子组件传递数据给父组件
子组件通过emit触发自定义事件,emit触发自定义事件,emit第二个参数为传递的数值
父组件绑定监听器获取到子组件传递过来的参数

ref 父组件在使用子组件的时候设置ref
父组件通过设置子组件ref来获取数据

EventBus
使用场景: 兄弟组件传值
创建一个中央时间总线EventBus
兄弟组件通过emit触发自定义事件,emit触发自定义事件,emit第二个参数为传递的数值
另一个兄弟组件通过$on监听自定义事件

parent或root
通过共同祖辈parent或者parent或者root搭建通行侨联

attrs与listeners
适用场景:祖先传递数据给子孙
设置批量向下传属性attrsattrs和listeners
包含了父级作用域中不作为prop被识别的特性绑定(class和style除外)
可以通过v-bind="$attrs"传入内部组件

provide与inject
在祖先组件定义provide属性,返回传递的值
在后代组件通过inject接收组件传递过来的值

vuex或者pinia
适用场景:复杂关系的组件数据传递
Vuex作用相当于一个用来存储共享变量的容器

image.png

state用来存放共享变量的地方
getter,可以增加一个getter派生状态,相当于store中的计算属性,用来获取共享变量的值
mutations用来存放修改state的方法
actions 也是用来存放修改state的方法,不过action是在mutations的基础上进行。常用来做一些异步操作

小结
父子关系的组件数据传递选择props与emit进行传递,也可选择ref兄弟关系的组件数据传递可选择emit进行传递,也可选择ref 兄弟关系的组件数据传递可选择bus,其次可以选择$parent进行传递
祖先与后代组件数据传递可选择attrs与listeners或者provide与inject
复杂关系的组件数据传递可以通过vuex存放共享的变量

参考网站:mp.weixin.qq.com/s?__biz=MzU…