vue组件间通信

 我来答
黑科技1718
2022-06-21 · TA获得超过5900个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:82.8万
展开全部

在父组件页面使用 v-bind: 或 : 将数据传递给子组件,子组件通过 props 获取父组件传递过来的值。

多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。但如果仅仅是传递数据,而不做中间处理,使用 vuex 处理,未免有点大材小用。为此Vue2.4 版本提供了另一种方法---- $attrs ;

示例:
我们向子组件son传递5个属性,再由子组件son向孙子组件grandson传递4个属性(这4个组件不做任何处理,只是传递),son组件向grandson组件传递的那4个属性就可以使用 v-bind=$attrs 。

通常和 $attrs 配合使用。

简单来说,使用 interitAttrs: false 子组件的$attrs不会被当做是html属性渲染到根元素上,防止修改html同名属性。

在子组件页面使用 this.$emit('自定义事件名', 数据); 将数据传递给父组件,父组件通过 @自定义事件名="事件处理方法名" 或者 v-on:自定义事件名="事件处理方法名" 获取子组件传递过来的值。

若公共组件被很多组件调用且抛出的自定义事件都不同,此时就可以使用 $listeners ;根据父组件调用的事件去决定抛出哪个自定义事件。

EventBus 又称为事件总线。在Vue中可以使用 EventBus 来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的灾难,因此才需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态层次。 更多EventBus

vuex官网

Vuex实现了一个单向数据流,在全局拥有一个State存放数据,当组件要更改State中的数据时,必须通过Mutation进行,Mutation同时提供了订阅者模式供外部插件调用获取State数据的更新。而当所有异步操作(常见于调用后端接口异步获取更新数据)或批量的同步操作需要走Action,但Action也是无法直接修改State的,还是需要通过Mutation来修改State的数据。最后,根据State的变化,渲染到视图上。

provide / inject 官网介绍

vue2.2.0 新增API,这对选项需要一起使用, 以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效 。如果你熟悉 React,这与 React 的上下文特性很相似。
provide / inject API 主要解决了跨级组件间的通信问题。 官网提供了很详细的介绍,这里直接上图

由图8-1可知, this.$children 获取到的是一个vue实列数组

由图8-2可知, this.$parent 获取到的是直接父实例

由图8-3可知, this.$refs 返回的是一个使用ref注册过的对象

sessionStorage、localStorage也能实现通信,但是需要监听storage的变化,如何监听storage的变化,之前有写过这篇文章 vue 监听localStorage、sessionStorage变化 ,这里就不赘述了。

vue组件间通信的六种方式

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式