Vue3使用mitt進行組件通信的步驟
- Vue2.x使用EventBus進行組件通信,而Vue3.x推薦使用mitt.js。
- 比起Vue實例上的EventBus,mitt.js好在哪里呢?首先它足夠小,僅有200bytes,其次支持全部事件的監(jiān)聽和批量移除,它還不依賴Vue實例,所以可以跨框架使用,React或者Vue,甚至jQuery項目都能使用同一套庫。
1. 安裝
推薦使用yarn安裝(用過都知道有多絲滑)
yarn add mitt
或者通過npm安裝
npm install --save mitt
2. 引入到項目并掛載
可以在main.js掛載到全局
// 標(biāo)準(zhǔn)的ES模塊化引入方式 import mitt from 'mitt' const app = createApp(App) // vue3.x的全局實例,要掛載在config.globalProperties上 app.config.globalProperties.$EventBus = new mitt()
/common/EventBus.js:也可以封裝一個ES模塊,對外暴露一個Mitt實例
import mitt from 'mitt' export default new mitt()
/views/Home.vue:業(yè)務(wù)模塊引入來使用
import EventBus from '/common/EventBus.js'
3. 使用
通過on監(jiān)聽/emit觸發(fā)
/*
* App.vue
*/
// setup中沒有this,需要通過getCurrentInstance來獲取Vue實例
import { getCurrentInstance } from 'vue'
import { Mp3Player } from '/common/Mp3Player.js'
export default {
setup(){
// ctx等同于Vue2.x的this
const { ctx } = getCurrentInstance()
// 監(jiān)聽-如果有新任務(wù)則播放音效
ctx.$EventBus.on('newTask', data => {
Mp3Player.play()
})
// 也可以通過*監(jiān)聽所有任務(wù)
ctx.$EventBus.on('*', data => {
console.log('EventBus come in', data)
})
}
}
/*
* Control.vue
*/
// 判斷有新任務(wù)時,觸發(fā)
ctx.$EventBus.emit('newTask', data)
off移除事件
import {
onBeforeUnmount,
getCurrentInstance
} from 'vue'
export default {
setup(){
const { ctx } = getCurrentInstance()
onBeforeUnmount(() => {
// 移除指定事件
ctx.$EventBus.off('newTask')
// 移除全部事件
ctx.$EventBus.all.clear()
})
}
}
以上就是Vue3使用mitt進行組件通信的步驟的詳細(xì)內(nèi)容,更多關(guān)于Vue3 用mitt進行組件通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue如何獲取new Date().getTime()時間戳
在Web開發(fā)中,前端使用Vue.js獲取的是毫秒級時間戳,而PHP后端則是秒級時間戳,處理此類問題時,需要將PHP的時間戳乘以1000轉(zhuǎn)換為毫秒級,以保證數(shù)據(jù)的一致性和正確的邏輯判斷2024-10-10
頁面內(nèi)錨點定位及跳轉(zhuǎn)方法總結(jié)(推薦)
這篇文章主要介紹了頁面內(nèi)錨點定位及跳轉(zhuǎn)方法總結(jié),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Vue開發(fā)配置tsconfig.json文件的實現(xiàn)
tsconfig.json文件中指定了用來編譯這個項目的根文件和編譯選項,本文就來介紹一下Vue開發(fā)配置tsconfig.json文件的實現(xiàn),感興趣的可以了解一下2023-08-08
Vue路由鉤子之a(chǎn)fterEach beforeEach的區(qū)別詳解
這篇文章主要介紹了Vue路由鉤子 afterEach beforeEach區(qū)別 ,vue-router作為vue里面最基礎(chǔ)的服務(wù),學(xué)習(xí)一段時間,對遇到的需求進行一些總結(jié)。需要的朋友可以參考下2018-07-07

