Vue-组件之间的通信方式

自定义组件事件,js中的内置事件是给html元素标签使用的,而组件的自定义事件是给组件使用的


父组件给子组件传递数据

使用props最优,即在父组件中定义[:数据],并在子组件中props中进行接收

子组件给父组件传递数据

其中School为子组件,定义了一个:getSchoolName的函数
在这里插入图片描述
其中School组件中进行声明接收
在这里插入图片描述

并在school组件中定义传递函数
在这里插入图片描述

使用组件自定义事件进行传递

第一种写法

App组件中定义给student组件绑定一个叫atguigu的事件,事件对应的处理函数名为getStudentName
在这里插入图片描述

在student组件中定义atguigu的触发,并传递name给父组件
在这里插入图片描述

第二种写法

使用ref
在这里插入图片描述
使用钩子函数mount
在这里插入图片描述
其中student组件中进行触发声明

在这里插入图片描述

组件自定义事件解绑

在student组件中进行定义
在这里插入图片描述
解绑多个自定义事件
在这里插入图片描述

组件自定义事件总结

在这里插入图片描述

组件数据传递的优选方式

全局事件总线

实现任意组件间的通信
1.在main.js文件中安装全局事件总线

new Vue(
{	
	......
	beforeCreate(){
		Vue.prototype.$bus = this // 安装全局事件总线,$bus就是当前应用vm
	}
	......
}
)

2.使用事件总线

类似于消息的订阅 类似于消息的订阅 类似于消息的订阅
接收数据,A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调在A组件自身

methods(){
	demo(data){......} // 名为demo的事件回调方法
}

mounted(){
	this.$bus.$on('事件名称',this.demo)
}
或者

mounted(){
	this.$bus.$on('事件名称',(data)=>{
	//通过组件的自定义事件获取到data数据
	console.log(data)
})
}

提供数据并触发
类似于消息的发布 类似于消息的发布 类似于消息的发布

this.$bus.$emit('事件名称',数据)
  1. 并在钩子函数beforeDestroy中用$off去解绑当前 组件所使用到的事件(在那个组件定义的on函数则在哪里进行销毁)
beforeDestroy(){
	this.$bus.$off('事件名称')
}

消息订阅与发布

借助第三方库进行实现
这里使用pubsub,进行安装

npm i pubsub-js

引用
谁需要收数据与发数据就在哪里进行引用

import pubsub from 'pubsub-js'

接收方进行订阅

mount(){
	this.pubId = pubsub.subscribe('消息名',(msgName,data)=>{
	// 其中msgName返回的是消息名,data返回的才是订阅的数据
		console.log('有人发布了hello消息,hello消息的回调执行了')
	})
}

发送方进行消息发布

mount(){
	sendData(data){
		pubsub.publish('消息名',data)//发布消息
	}
	
}

接收方进行消息订阅的取消

beforeDestroy(){
	//通过订阅返回的id进行订阅的取消
	pubsub.unsubscribe(this.pubId)
}
  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值