vue3中如何实现事件总线eventBus

news2024/11/16 2:36:34

使用插件

由于vue3中 “$ on”,$ off 和 $ once 实例方法已被移除,组件实例不再实现事件触发接口 所以我们可以使用官方推荐的这个第三方库实现同样的效果
mitt https://github.com/developit/mitt

安装

pnpm install mitt -S

挂载全局写法

main.ts 初始化
全局总线,vue 入口文件 main.js 中挂载全局属性

import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
// 引入animate动画
import 'animate.css';
//挂载事务总线
import mitt from 'mitt'
const app = createApp(App)
const miTT = mitt()
//TypeScript注册
// 由于必须要拓展ComponentCustomProperties类型才能获得类型提示
declare module "vue" {
  export interface ComponentCustomProperties {
      $bus: typeof miTT
  }
}

app.config.globalProperties.$bus = miTT

app.use(createPinia())
app.use(router)
app.use(ElementPlus)
app.mount('#app')

父组件

<template>
  <A></A>
  <B></B>
</template>

<script setup lang="ts">
import A from './components/A.vue'
import B from './components/B.vue'
</script>

<style scoped>

</style>

组件A

<template>
  <div style="margin-right: 30px;">
    <h1>派发组件</h1>
     <button @click="emitIndex">派发事件</button>
  </div>
</template>

<script setup lang="ts">
import { getCurrentInstance } from 'vue'
// vue实例
const vm = getCurrentInstance();
 const emitIndex = () => {
  // self.console.log(123,vm)
  vm?.proxy?.$bus.emit('on-click', 1)
 }
</script>

<style scoped>

</style>

组件B

<template>
  <div>
   <h1>接收组件</h1>
   <div>接收的值{{ bData }}</div>
  </div>
 </template>
 
 <script setup lang="ts">
 import { getCurrentInstance,ref } from 'vue'
  const vm = getCurrentInstance()
  let bData = ref<Number>(0)
  vm?.proxy?.$bus.on('on-click', (num) => {
      bData.value += num
      console.log(num,'===========>B')
  })
 </script>
 
 <style scoped>
 
 </style>
 

效果如下

点击 按钮 b组件中的数值增加

在这里插入图片描述
监听所有事件( on(“*”) )

vm?.proxy?.$bus.on('*', (num) => {
      bData.value += num
      console.log(num,'===========>B')
  })

移除监听事件(off)

vm?.proxy?.$Bus.on('on-click',Fn)//listen
vm?.proxy?.$Bus.off('on-click',Fn)//unListen

清空所有监听(clear)

vm?.proxy?.$Bus.all.clear() 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1277139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[全球首款]开源智能串口屏方案发布

基于 AWTK 和 AWTK-MVVM 实现的串口屏方案。 界面修改数据&#xff0c;自动通知 MCU。 MCU 修改数据&#xff0c;自动更新界面。 1. 主要特色&#xff1a; 1.1 开发 强大的界面设计器 AWStudio。基于 AWTK 实现强大的 GUI 功能&#xff08;多窗口、输入法、动画和各种控件&am…

数据算法之层次聚类——(待完善)

1.数据挖掘入门笔记——层次聚类 ( 浮光掠影) 2.聚类算法&#xff1a;Hierarchical Clustering层次聚类 3.一文读懂层次聚类&#xff08;Python代码&#xff09; 4.层次聚类 5.聚类分析&#xff08;三&#xff09; 层次聚类及matlab程序 5.聚类算法之层次聚类&#xff08…

Linux文件系统 -- inode和block

目录 重要参数目录项fsck软连接&#xff0c;硬链接 重要参数 dumpe2fs /dev/sda1|more查看ext4文件元数据&#xff08;描述文件系统的数据&#xff09;&#xff0c;xfs_info查看xfs文件系统 superblock&#xff1a;超级块&#xff0c;记录此file system的整体信息&#xff0c…

SSM实战项目,基于Spring+SpringMVC+mybatis实现的人事管理系统源码+数据库+使用说明

SSM实战项目&#xff1a;人事管理系统&#xff08;蓝色版&#xff09; 一、员工管理系统项目说明&#xff1a; 该项目主要是完成SpringSpringMVCmybatis的完整整合&#xff0c;功能实现比较单一&#xff0c;就是一个完成增删改查的小项目&#xff01; 完整代码下载地址SSM实…

游戏网站的技术 SEO:提示和最佳实践

您是否希望提高游戏网站上的自然搜索可见性和用户参与度&#xff1f;如果是这样&#xff0c;实施技术SEO最佳实践是必不可少的。在这篇博文中&#xff0c;我们将提供使用技术 SEO 优化游戏网站的技巧和最佳实践&#xff0c;并讨论为什么它是搜索引擎优化 &#xff08;SEO&#…

熬夜会秃头——beta冲刺Day2

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day2团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…

【高效开发工具系列】驼峰下划线互转

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

centos7 yum安装redis

1.安装epel源 yum install epel-release -y 2.安装 参数-y是遇到yes/no时 自动yes yum install redis -y 3.查看redis安装的位置 whereis redis 4.打开配置文件 vim /etc/redis.config 5.修改密码 在打开的文件中输入 /requirepass 后按下确认键&#xff0c;(找下一个关…

常见的攻击防护

只做模拟机器使用&#xff0c;不使用真实机器 目录 一、 DHCP饿死和防护应对措施.................................. 1 1&#xff0c; 实验拓扑&#xff1a;...................................................... 2 2&#xff0c; 实验配置............................…

Web网页安全策略的研究及其实现方案

摘 要 越来越多的人使用电脑来接触互联网&#xff0c;事实上&#xff0c;使用Web技术的实现基于网络的不断完善和发展的交流网站&#xff0c;人们可以利用计算机网络技术&#xff0c;方便得到想要的任何信息。计算机网络的发展&#xff0c;也促进了相关产业的发展&#xff0c;…

C++11【下】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb; 新的类功能类成员变量初始…

【pytorch】从yolo的make_grid理解torch.meshgrid、torch.stack

文章目录 简述1、torch.meshgrid 创建行列坐标2、torch.stack 结合行列坐标3、通过view函数扩展维度 简述 yolo检测 make_grid创建网格代码如下&#xff0c;那么什么是torch.meshgrid? def _make_grid(nx20, ny20):yv, xv torch.meshgrid([torch.arange(ny), torch.arange(…

三 STM32F4使用Sys_Tick 实现微秒定时器和延时

更多细节参考这篇 1. 什么是时钟以及作用 1.1 什么是时钟 时钟是由电路产生的周期性的脉冲信号&#xff0c;相当于单片机的心脏 1.2 时钟对于STM32的作用 指令同步&#xff1a;cpu和内核外设使用时钟信号来进行指令同步数据传输控制&#xff1a; 时钟信号控制数据在内部总…

CSS新手入门笔记整理:CSS图片样式

图片大小 语法 width:像素值; height:像素值; 图片边框&#xff1a;border 语法 边框&#xff1a;宽度值 样式值 颜色值&#xff1b; border:1px solid red; 图片对齐 水平对齐&#xff1a;text-align 语法 text-align:取值; 属性值 说明 left 左对齐(默认值) cent…

【Java Web学习笔记】 1 - HTML入门

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/html 零、网页的组成 HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息&#xff0c;可以包含文字、图片视频等。 CSS样式是表现。就像网页的外衣。比如&#xff0c;标题字体、…

go学习之goroutine和channel

文章目录 一、goroutine(协程)1.goroutine入门2.goroutine基本介绍-1.进程和线程说明-2.程序、进程和线程的关系示意图-3.Go协程和Go主线程 3.案例说明4.小结5.MPG模式基本介绍6.设置Golang运行的CPU数7.协程并发&#xff08;并行&#xff09;资源竞争的问题8.全局互斥锁解决资…

【渗透】记录阿里云CentOS一次ddos攻击

文章目录 发现防御 发现 防御 流量清洗 使用高防

acwing算法基础之动态规划--数位统计DP、状态压缩DP、树形DP和记忆化搜索

目录 1 基础知识2 模板3 工程化 1 基础知识 暂无。。。 2 模板 暂无。。。 3 工程化 题目1&#xff1a;求a~b中数字0、数字1、…、数字9出现的次数。 思路&#xff1a;先计算1~a中每位数字出现的次数&#xff0c;然后计算1~b-1中每位数字出现的次数&#xff0c;两个相减即…

YOLOv8优化策略:SENetV2,squeeze和excitation全面升级,效果优于SENet | 2023年11月最新成果

🚀🚀🚀本文改进: SENetV2,squeeze和excitation全面升级,作为注意力机制引入到YOLOv8,放入不同网络位置实现涨点 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.SENetV2 论文:https://arxiv.org/…

java:springboot3集成swagger(springdoc-openapi-starter-webmvc-ui)

背景 网上集成 swagger 很多都是 Springfox 那个版本的&#xff0c;但是那个版本已经不更新了&#xff0c;springboot3 集成会报错 Typejavax.servlet.http.HttpServletRequest not present&#xff0c;我尝试了很多才知道现在用 Springdoc 了&#xff0c;今天我们来入门一下 …