一、前言
在Vue升级到3.0版本后,prototype属性就被取消了,所以我们不能再使用Vue2中的Vue.prototype.$bus=new Vue()
的方式来使用全局事件总线。在Vue3中,推荐使用mitt这一三方库来帮助我们实现全局事件总线。
二、安装
Mitt是一个微型的 EventEmitter 库,在Vue3中,官方推荐使用它替代已经移除的EventBus
npm install mitt --save
三、主要的三个方法
emit(name,data)
//触发事件,两个参数:name:触发的方法名,data:需要传递的参数
on(name,callback)
//绑定事件,两个参数:name:绑定的方法名,callback:触发后执行的回调函数
off(name)
//解绑事件,一个参数:name:需要解绑的方法名
四、两种不同的注册使用方法
1.引入
import mitt from 'mitt'
import {createApp} from 'vue'
import {App} from './App'
const app = createApp(App)
const bus = mitt()
app.config.globalProperties.$bus = bus //相当于Vue2中的:Vue.prototype.$bus = bus
...
2.使用
组件A:
<template>
<h1>
我是A组件
</h1>
<button @click="emitMitt">
点我控制B输出信息
</button>
</template>
<script lang='ts' setup>
import { getCurrentInstance } from 'vue'
const cxt = getCurrentInstance() //相当于Vue2中的this
const bus = cxt.appContext.config.globalProperties.$bus
const emitMitt = function(){
bus.emit('printMessage','我是B组件,我被A组件触发了')
}
</script>
组件B:
<template>
<h1>
我是B组件
</h1>
</template>
<script lang='ts' setup>
import { getCurrentInstance,onMounted,onBeforeUnmount } from 'vue'
const cxt = getCurrentInstance()
const bus = cxt.appContext.config.globalProperties.$bus
onMounted(()=>{
bus.on('printMessage',(message)=>{
alert(message)
})
})
onBeforeUnmount(()=>{
bus.off('printMessage')
})
</script>
1.引入
import mitt from 'mitt'
export const events = mitt()
2.使用
组件A:
<template>
<h1>
我是A组件
</h1>
<button @click="emitMitt">
点我控制B输出信息
</button>
</template>
<script lang='ts' setup>
import { events } from '../bus.js' //引入事件总线,填写正确的bus.js路径
const emitMitt = function(){
events.emit('printMessage','我是B组件,我被A组件触发了')
}
</script>
组件B:
<template>
<h1>
我是B组件
</h1>
</template>
<script lang='ts' setup>
import { onMounted,onBeforeUnmount } from 'vue'
import { events } from '../bus.js'
onMounted(()=>{
events.on('printMessage',(message)=>{
alert(message)
})
})
onBeforeUnmount(()=>{
events.off('printMessage')
})
</script>
注意点
原文地址:https://blog.csdn.net/qq_52013792/article/details/125803290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_43620.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。