1.安装
npm install mitt -S
2.引入
全局引入:
在main.ts中
import mitt from "mitt"
const Mit = mitt()
app.config.globalProperties.$Bus = Mit
declare module "vue" {
export interface ComponentCustomProperties {
$Bus: typeof Mit
}
}
import { createApp } from "vue"
import App from "./App.vue"
import "./style.css"
import Card from "./components/Card/index.vue"
import ElementPlus from "element-plus"
import "element-plus/dist/index.css"
import mitt from "mitt"
const Mit = mitt()
declare module "vue" {
export interface ComponentCustomProperties {
$Bus: typeof Mit
}
}
const app = createApp(App)
app.config.globalProperties.$Bus = Mit
app.use(ElementPlus).component("Card", Card)
app.mount("#app")
3.使用
在兄弟组件A,B中传参
A中:
const emit = () => {
instance?.proxy?.$Bus.emit("on-num", 100)
}
B中:
instance?.proxy?.$Bus.on("on-num", (str: any) => {
console.log(str)
})
B中:
instance?.proxy?.$Bus.off('on-num')
A:
const emit = () => {
instance?.proxy?.$Bus.emit("on-num", 100)
instance?.proxy?.$Bus.emit("on-num2", 101)
}
B中:
instance?.proxy?.$Bus.on("*", (type: string, str: any) => {
console.log(type, str)
})
instance?.proxy?.$Bus.all.clear()
A.vue:
<template>
<div style="border: 1px solid red">
A
<button @click="emit">A</button>
</div>
</template>
<script setup lang="ts">
import { getCurrentInstance } from "vue"
const instance = getCurrentInstance() as any
const emit = () => {
instance?.proxy?.$Bus.emit("on-num", 100)
instance?.proxy?.$Bus.emit("on-num2", 101)
}
</script>
B.vue:
<template>
<div style="border: 1px solid green">B</div>
</template>
<script setup lang="ts">
import { getCurrentInstance } from "vue"
const instance = getCurrentInstance() as any
instance?.proxy?.$Bus.on("*", (type: string, str: any) => {
console.log(type, str)
})
instance?.proxy?.$Bus.all.clear()
</script>