组件通信-mitt

mitt:与消息订阅与发布(pubsub)功能类似,可以实现任意组件间通信。

第一步:安装mitt

npm i mitt

第二步:新建文件:src\utils\emitter.ts
TypeScript 复制代码
// 引入mitt
import mitt from "mitt"; 

//调用mitt得到emitter,emitter能:绑定事件、触发事件、解绑事件
const emitter= mitt()

//暴露/导出
export default emitter;
第三步:接收数据的组件中:绑定事件、同时在销毁前解绑事件:
html 复制代码
<script setup lang="ts">
import { ref,onUnmounted } from 'vue'
import emitter from '@/utils/emitter';
const toy = ref('奥特曼')
const phone = ref('')

// 绑定send-phone事件监听  
emitter.on('send-phone', (value: any) => {  
  phone.value = value // 当接收到'send-phone'事件时,将传递的值赋值给phone  
  console.log(value); // 输出接收到的值  
})  

// 在组件卸载时解除事件监听  
onUnmounted(() => {  
  emitter.off('send-phone') // 移除名为'send-phone'的事件监听  
})  
</script>

<template>
  <div class="child">
    <h1>子组件2</h1>
    <h3>子组件2的玩具:{{ toy }}</h3>
    <h3>组件1给的手机:{{ phone }}</h3>
  </div>

</template>
第四步:提供数据的组件,在合适的时候触发事件
html 复制代码
<script setup lang="ts">
import { ref } from 'vue'
import emitter from '@/utils/emitter';
const phone = ref('oppo')
</script>

<template>
  <div class="child">
    <h1>子组件1</h1>
    <h4>子组件1的手机:{{ phone }}</h4>
    <!-- 点击按钮时,通过事件总线发送名为'send-phone'的事件,并传递phone变量作为参数 -->  
    <button @click="emitter.emit('send-phone', phone)">测试</button>
  </div>

</template>
相关推荐
雪芽蓝域zzs5 小时前
第 2 节:基础扩展 - 下拉弹窗常用原生属性
vue.js·elementui
扶风ff6 小时前
新品知识更新太快?用练题簿在线刷题,安排企业培训的小测与复盘
前端·学习·小程序
对空六课6 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
Csvn7 小时前
Vue3 响应式与编译:依赖收集如何升级为节点级靶向更新
前端
星栈8 小时前
pnpm 12 升级实测
前端·javascript
Sirens.8 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
Ai-_Man9 小时前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
特创数字科技10 小时前
一个纯本地运行的图片处理工具:压缩 / 裁剪 / 九宫格 / 圆角 / 滤镜 / 拼图 / 水印,终生使用
前端
IT_陈寒10 小时前
Vue的v-if和v-for混用居然是个天坑
前端·人工智能·后端
天衍四九-11 小时前
【无标题】
前端·spring boot·mysql·nginx·docker