vue——组件之间的通信

组件之间的通信

一、父组件调用子组件方法

  1. vue3

使用defineExpose暴露子组件方法

// 父组件
<son ref="homeDashboardRef"/>

const homeDashboardRef = ref()
const beforeShow = () => {
  if (homeDashboardRef.value) {
    homeDashboardRef.value.getTodoData()
  }
}

// 子组件
const getTodoData = () => {...}
defineExpose({ getTodoData })  // 暴露方法
  1. vue2

使用$ref

// 父组件
<son ref="homeDashboardRef"/>

const beforeShow = () => {
  this.homeDashboardRef?.getTodoData()
}

// 子组件
const getTodoData = () => {...}

二、子组件调用父组件方法

子组件可通过emits修改父组件数据

// 父组件
<son :tapHandler="getTodoData" />
function getTodoData(){}

// 子组件
<div @tap='handler'><div>

const emits = defineEmits(['tapHandler'])
function handler(data){
	// vue3
    emits('tapHandler', {data})
    // vue2
    this.$emit('tapHandler', {data})
}

三、全局事件总线$bus(非父子组件)

通过事件派发和事件监听实现跨组件通信(观察者模式)

// vue2
this.$bus.$on('事件名', ()=>{})  // 事件监听
this.$bus.emit('事件名',4 {参数})  // 事件派发
// vue3 使用mitt库
// 封装eventBus.js
import mitt from 'mitt';
const emitter = mitt();
export default emitter;
// 事件派发
emitter.emit('事件名', {参数});
// 事件监听
emitter.on('事件名', ()=>{})

四、消息订阅与发布(pubsub)

// 订阅消息
this.pubId = pubsub.subscribe('消息名', 回调方法) // 设置pubId方便取消订阅
// 发布消息
pubsub.publish('消息名', {数据})
// 取消订阅(beforeDestroy调用)
pubsub.unsubscribe(this.pubId);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值