当前位置: 首页 > news >正文

Vue3组件传参之Mitt插件方式

在vue3中$on,$off 和 $once 实例方法已被移除,组件实例不再实现事件触发接口,因此大家熟悉的EventBus便无法使用了。然而我们习惯了使用EventBus,对于这种情况我们可以使用Mitt库(其实就是我们视频中讲的发布订阅模式的设计)

一、安装

npm install mitt -S

二、main.ts 初始化

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

import { createApp } from 'vue'
import App from './App.vue'
import mitt from 'mitt'const Mit = mitt()//TypeScript注册
// 由于必须要拓展ComponentCustomProperties类型才能获得类型提示
declare module "vue" {export interface ComponentCustomProperties {$Bus: typeof Mit}
}const app = createApp(App)//Vue3挂载全局API
app.config.globalProperties.$Bus = Mitapp.mount('#app')

三、使用方法通过emit派发, on 方法添加事件,off 方法移除,clear 清空所有

A组件派发(emit)

<template><div><h1>我是A</h1><button @click="emit1">emit1</button><button @click="emit2">emit2</button></div>
</template><script setup lang='ts'>
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance();
const emit1 = () => {instance?.proxy?.$Bus.emit('on-num', 100)
}
const emit2 = () => {instance?.proxy?.$Bus.emit('*****', 500)
}
</script><style>
</style>

B组件监听(on)

<template><div><h1>我是B</h1></div>
</template><script setup lang='ts'>
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
instance?.proxy?.$Bus.on('on-num', (num) => {console.log(num,'===========>B')
})
</script><style>
</style>

监听所有事件( on("*") )

instance?.proxy?.$Bus.on('*',(type,num)=>{console.log(type,num,'===========>B')
})

移除监听事件(off)

const Fn = (num: any) => {console.log(num, '===========>B')
}
instance?.proxy?.$Bus.on('on-num',Fn)//listen
instance?.proxy?.$Bus.off('on-num',Fn)//unListen

清空所有监听(clear)

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

转载自小满zs老师

http://www.lryc.cn/news/229108.html

相关文章:

  • 【数据仓库】数仓分层方法
  • Linux网络——自定义协议
  • 【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】
  • 【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置
  • js控制手机蓝牙
  • C++11 原始字符串字面量R“()“
  • 【Vue原理解析】之虚拟DOM
  • HCIE-灾备技术和安全服务
  • 【图论实战】Boost学习 01:基本操作
  • Rust 中的引用与借用
  • Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型
  • XML Web 服务 Eclipse实现中的sun-jaxws.xml文件
  • 16.1 二次根式 教学设计及课堂检测设计
  • Android数据流的狂欢:Channel与Flow
  • Java 单元测试最佳实践:如何充分利用测试自动化
  • windows系统用于 SDN 的软件负载均衡器 (SLB)
  • 漏洞复现--IP-guard flexpaper RCE
  • Electron-vue出现GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案
  • Linux---(六)自动化构建工具 make/Makefile
  • 谷歌:编写干净的代码以减少认知负荷
  • 微信小程序display常用属性和子元素排列方式介绍
  • 设计模式—结构型模式之代理模式
  • C# PDF转HTML字符串
  • el-table解决数据过少小于高度有留白的问题
  • vue实现无感刷新token
  • 竞赛选题 深度学习的动物识别
  • Python高级语法----Python C扩展与性能优化
  • 行业洞察:分布式云如何助力媒体与娱乐业实现创新与增长?
  • 【多线程 - 05、后台线程】
  • C语言之文件操作(剩余部分)