Vue案例引发的「嵌套组件」通信的简单方式

本文介绍了在Vue中如何使用$attrs和$listeners进行祖孙组件之间的通信,避免引入Vuex增加复杂度。通过实例展示了如何在组件A和组件C之间传递数据,同时提到了利用inheritAttrs: false防止非Props属性渲染到HTML原生标签。

我们都知道 Vue 是采用组件化开发的模式,组件化的优势在于相对独立,易于维护,可复用。你可以把项目看成许多组件的组合而成。

既然项目中存在很多的组件,而且又是相对独立的,但组件间肯定是存在数据的传递交互。Vue中给我提供比较多的方式去进行组件间的交互通信。

这篇文章不打算详尽组件之间的通信,而是说说利用 $attrs 与 $listeners 进行「嵌套组件」的通信。

可以想象一下项目中组件与组件的关系无外乎这么几种:父子,兄弟,祖孙(嵌套)。

  1. 父子组件:父组件通过 props 向下传递子组件数据,子组件通过事件向上发送父组件消息。或者也可以通过 ref 属性、$parent、$children等方法获取数据和事件。
  2. 兄弟组件:可以通过共同的父组件作为桥梁进行通讯,也可以利用全局事件 eventBus 或者比较复杂的 Vuex。

一图胜千言

通过上图,我们可以了解常见的组件通信方式。但实际的开发项目中可能并没有这么简单,最近在做项目时遇到嵌套组件的情况,比如「组件A」包含「组件B」,「组件B」包含「组件C」。

那「组件A」与「组件C」如何通信就是值得我们商榷的问题,是利用 Vuex 还是利用其他方式呢?

首先 Vuex 是优秀的状态管理工具,对于复杂而又庞大的系统而言使用 Vuex 再好不过。

但如果我们的系统相对简单,并且「组件A」与「组件C」之间只是进行简单的数据传递,似乎引入 Vuex 并不是一个好的选择,相反会带来复杂度的上升。

不过 Vue 在 2.4.0 版本添加了 2 个属性「$attrs」与「$listeners」,使用它们进行嵌套组件(祖孙)的通信是一个不错的选择,接下来我们就看看它们是什么,以及如何使用。

1.$attrs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值