vue中组件互相通信几种方式

vue中组件互相通信几种方式
1,父组件向子组件传递 props法
实现步骤:先在父组件中对子组件进行绑定值,用v-bind去绑定要传递的值,子组件在props中引入,然后子组件就能使用父组件传递的数据了。
父组件部分
在这里插入图片描述

子组件部分
在这里插入图片描述

2,子向父组件传递 props法
实现步骤:父组件先给子组件用props传递一个方法,子组件通过props接受父组件穿过来的方法,并且子组件通过调用这个方法将需要传递的值通过参数的方法利用方法把参数传给父组件,父组件就可以用子组件传递过来的值了
父组件部分
在这里插入图片描述
子组件部分
在这里插入图片描述
3,子组件传父组件 自定义事件法
实现步骤:先在父组件中为子组件绑定自定义事件,并且添加相应的函数用来接受子组件那边传过来 的数据,接着在子组件中去用$emit触发自定义事件。
父组件
在这里插入图片描述
在这里插入图片描述
子组件部分
在这里插入图片描述

5,全局事件总线(vue2中通过在vm的原型上挂载一个公共事件总线)
首先先创建一个空的vue实例作为事件总线
const eventbus=new vue()

 然后挂载到vue的原型上一遍所有的组件实例都能访问
 vue.prototype.$bus=eventbus
 
 然后根据订阅发布模式进行绑定
 订阅者也就是需要接受信息的组件去创建定义
 this.$bus.$on("eventname",eventdata=>{})
 
 发布者也就是需要发送信息的组件去创建定义
 this.$bus.$emit("eventname",eventdata)

最后在组件销毁前需要去手动解绑,提升性能
this.$bus.$off("eventname",callback)

6,provide和inject(适用于祖孙之间通信)
祖先组件定义 provide:{
eventname:‘data1’,
}
孙组件定义 inject:[‘eventname’] 可以直接通过this去访问

弊端不是响应式需要手动去添加watch监听,而且不知道来源去处混乱,破坏了组件封装性不建议经常使用

7, $attrs和 $listeners
$attrs可以接受到父组件传递过来的属性值,子组件可以通过这个属性去访问值,但是如果子组件props接受了, $attrs就无法接受到属性值
$listeners 可以接受到父组件传过来的事件,只能传事件
$attrs同样接受到的值也不是响应式数据

8,通过vuex去管理数据,实现组件之间的通信(另外自己写一篇细讲)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值