组件通信-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>
相关推荐
FungLeo7 分钟前
vue2 + webpack 老项目升级 node v22 + vite + vue2 实战全记录
前端·webpack·vue2·vie·webpack 升级 vite
西洼工作室12 分钟前
使用原生前端技术封装一个组件
前端·js
xiaofann_24 分钟前
【数据结构】单链表练习
linux·前端·数据结构
烛阴1 小时前
为什么选择Day.js?比Moment.js更轻更快的日期处理神器
前端·javascript
XiaoLeisj1 小时前
【JUC】深入解析 JUC 并发编程:单例模式、懒汉模式、饿汉模式、及懒汉模式线程安全问题解析和使用 volatile 解决内存可见性问题与指令重排序问题
javascript·安全·单例模式
moyu841 小时前
从 XMLHttpRequest 到 Fetch:AJAX 请求的演进与最佳实践
前端·javascript
划水小将军1 小时前
睡眠分期 html
前端·javascript·html
工业聚2 小时前
AI 时代的前端成长之路(2025版)
前端·人工智能
blues_C2 小时前
九、【前后端联调篇】Vue3 + Axios 异步通信实战
vue.js·后端·django·axios·drf·测试平台
m0_694845572 小时前
服务器如何配置防火墙管理端口访问?
linux·运维·服务器·前端