Vue3使用mitt進(jìn)行組件通信的步驟
- Vue2.x使用EventBus進(jìn)行組件通信,而Vue3.x推薦使用mitt.js。
- 比起Vue實(shí)例上的EventBus,mitt.js好在哪里呢?首先它足夠小,僅有200bytes,其次支持全部事件的監(jiān)聽和批量移除,它還不依賴Vue實(shí)例,所以可以跨框架使用,React或者Vue,甚至jQuery項(xiàng)目都能使用同一套庫。
1. 安裝
推薦使用yarn安裝(用過都知道有多絲滑)
yarn add mitt
或者通過npm安裝
npm install --save mitt
2. 引入到項(xiàng)目并掛載
可以在main.js掛載到全局
// 標(biāo)準(zhǔn)的ES模塊化引入方式 import mitt from 'mitt' const app = createApp(App) // vue3.x的全局實(shí)例,要掛載在config.globalProperties上 app.config.globalProperties.$EventBus = new mitt()
/common/EventBus.js:也可以封裝一個ES模塊,對外暴露一個Mitt實(shí)例
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實(shí)例
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ù)時(shí),觸發(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進(jìn)行組件通信的步驟的詳細(xì)內(nèi)容,更多關(guān)于Vue3 用mitt進(jìn)行組件通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue如何獲取new Date().getTime()時(shí)間戳
在Web開發(fā)中,前端使用Vue.js獲取的是毫秒級時(shí)間戳,而PHP后端則是秒級時(shí)間戳,處理此類問題時(shí),需要將PHP的時(shí)間戳乘以1000轉(zhuǎn)換為毫秒級,以保證數(shù)據(jù)的一致性和正確的邏輯判斷2024-10-10
vue實(shí)現(xiàn)PC端錄音功能的實(shí)例代碼
這篇文章主要介紹了vue實(shí)現(xiàn)PC端錄音功能的實(shí)例代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
頁面內(nèi)錨點(diǎn)定位及跳轉(zhuǎn)方法總結(jié)(推薦)
這篇文章主要介紹了頁面內(nèi)錨點(diǎn)定位及跳轉(zhuǎn)方法總結(jié),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Vue.js實(shí)現(xiàn)拖放效果的實(shí)例
這篇文章主要介紹了Vue.js實(shí)現(xiàn)拖放效果的實(shí)例的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Vue開發(fā)配置tsconfig.json文件的實(shí)現(xiàn)
tsconfig.json文件中指定了用來編譯這個項(xiàng)目的根文件和編譯選項(xiàng),本文就來介紹一下Vue開發(fā)配置tsconfig.json文件的實(shí)現(xiàn),感興趣的可以了解一下2023-08-08
用Vue.js實(shí)現(xiàn)監(jiān)聽屬性的變化
響應(yīng)系統(tǒng)是Vue.js的一個顯著功能,修改屬性,可以更新視圖,這讓狀態(tài)管理變得非常簡單且直觀。這篇文章主要給大家介紹如何利用Vue.js實(shí)現(xiàn)觀察屬性的變化,有需要的朋友們可以參考借鑒,感興趣的朋友們下面來一起看看吧。2016-11-11
Vue路由鉤子之a(chǎn)fterEach beforeEach的區(qū)別詳解
這篇文章主要介紹了Vue路由鉤子 afterEach beforeEach區(qū)別 ,vue-router作為vue里面最基礎(chǔ)的服務(wù),學(xué)習(xí)一段時(shí)間,對遇到的需求進(jìn)行一些總結(jié)。需要的朋友可以參考下2018-07-07

