最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3使用mitt.js實(shí)現(xiàn)各種組件間的通信

 更新時(shí)間:2024年05月21日 10:21:46   作者:A-超  
在vue工程中,除開vue自帶的什么父子間,祖孫間通信,還有一個(gè)非常方便的通信方式,類似Vue2.x?使用?EventBus?進(jìn)行組件通信,而?Vue3.x?推薦使用?mitt.js,可以實(shí)現(xiàn)各個(gè)組件間的通信,所以本文給大家介紹了vue3使用mitt.js實(shí)現(xiàn)組件通信,需要的朋友可以參考下

引言

我們?cè)趘ue工程中,除開vue自帶的什么父子間,祖孫間通信,還有一個(gè)非常方便的通信方式,類似Vue2.x 使用 EventBus 進(jìn)行組件通信,而 Vue3.x 推薦使用 mitt.js??梢詫?shí)現(xiàn)各個(gè)組件間的通信

優(yōu)點(diǎn):首先它足夠小,僅有200bytes,其次支持全部事件的監(jiān)聽和批量移除,它還不依賴 Vue 實(shí)例,所以可以跨框架使用

1、在項(xiàng)目中引入mitt.js

npm install --save mitt

2、在項(xiàng)目中自定義ts文件引入并暴露mitt.js

我這里是在新建文件夾utils下新建文件命名app-events.ts

//app-events.ts文檔
/**
 * 業(yè)務(wù)中跨域調(diào)用、解決耦合問題
 */
import mitt from 'mitt'
const AppEvents = mitt()
export default AppEvents

3、使用mitt.js

(1)在組件branchAside.vue,傳輸參數(shù)給組件 fileAside.vue (這兩個(gè)組件可以沒任何關(guān)系)

在組件branchAside.vue里面mitt.js使用如下:

聲明方法和傳參數(shù)

<script lang="ts" setup>
 
import AppEvents from '@/utils/app-events' //引入mitt.js
 
// 調(diào)用nameFn方法就可以觸發(fā)
const nameFn = (item: string='test') => {
// AppEvents.emit('自定義名字', 參數(shù))
  AppEvents.emit('sideOpen', item) //使用emit傳送方法名字和參數(shù)
}
 
</script>

(2)在組件 fileAside.vue里面接受方法和參數(shù):

<script lang="ts" setup>
import { onBeforeUnmount, onMounted } from 'vue'  // 引入頁面初始化的生命周期和銷毀的生命周期
import AppEvents from '@/utils/app-events' // 引入mitt.js
 
 
//在頁面初始生命周期,通過on監(jiān)聽方法和接受參數(shù)
onMounted(() => {
//AppEvents.on('方法名字',(val:any)=>{console.log('接收到的參數(shù)-->', val)})
 
  AppEvents.on('sideOpen', (val: any) => {
    console.log('mitt---->', val)
  })
})
 
 
// 頁面銷毀,通過off注銷該自定義命名的方法
onBeforeUnmount(() => {
  AppEvents.off('sideOpen')
})
</script>

拓展知識(shí):vue3中mitt.js使用方法

由于在vue3.0中移除了vue實(shí)例的$on(), $off()方法,所以,在vue3.0取而代之的是用mitt.js第三方庫(kù)來實(shí)現(xiàn)平行組件間的通信,其特點(diǎn)是小巧,輕量。

在vue2中我們通過事件總線eventBus,來實(shí)現(xiàn)兩個(gè)平行組件之間的通信:

bus.js

import Vue from 'vue'
// 創(chuàng)建vue實(shí)例
const Bus = new Vue()
export default Bus

在具體的組件中:
A.vue

import Bus from './bus.js'
// 發(fā)布一個(gè)事件
Bus.$emit('sendData', {name: 'Jack',age: 20})

B.vue

import Bus from './bus.js'
// 訂閱一個(gè)事件
Bus.on('sendData', (param) => {
	console.log(param)
})

main.js vue入口文件, 或者直接將bus實(shí)例掛在在vue的原型上:

import Vue from 'vue'
const Bus = new Vue()
Vue.prototype.$Bus = Bus

那么,在vue3我們也可以通過mitt.js來實(shí)現(xiàn)兩個(gè)平行組件之間的通信
首先安裝:npm install --save mitt在項(xiàng)目src目錄下新建一個(gè)

mitt.js

文件

import mitt from 'mitt'
// 創(chuàng)建mitt實(shí)例
const emitter = mitt()
// 導(dǎo)出
export default emitter

在具體的組件實(shí)例中:
A.vue

import emitter from '@/mitt.js'
// 發(fā)布一個(gè)事件,并傳遞參數(shù)
emitter.emit('sendData', {name: 'David', 'age': 20})

B.vue

import emitter from '@/mitt.js'
// 發(fā)布一個(gè)事件,并傳遞參數(shù)
emitter.on('sendData', (param) => {
	console.log(param)
})
// main.js
import emitter from '@/mitt.js'
app.config.globalProperties.$emitter = emitter

那么在vue3 setup 語法中:

const { getCurrentInstance } from 'vue'
const proxy = getCurrentInstance() // 返回vue的實(shí)例
proxy.$emitter.on('foo', e => console.log(e)) // 訂閱事件
proxy.$emitter.emit('foo', {a: b}) // 發(fā)布事件

到此這篇關(guān)于vue3使用mitt.js實(shí)現(xiàn)各種組件間的通信的文章就介紹到這了,更多相關(guān)vue3 mitt.js組件通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue實(shí)現(xiàn)點(diǎn)擊后文字變色切換方法

    Vue實(shí)現(xiàn)點(diǎn)擊后文字變色切換方法

    下面小編就為大家分享一篇Vue實(shí)現(xiàn)點(diǎn)擊后文字變色切換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue遮罩層如何阻止?jié)L動(dòng)

    vue遮罩層如何阻止?jié)L動(dòng)

    這篇文章主要介紹了vue遮罩層如何阻止?jié)L動(dòng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue的狀態(tài)管理模式vuex

    vue的狀態(tài)管理模式vuex

    本篇文章主要介紹了深入理解vue的狀態(tài)管理模式vuex,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • element 動(dòng)態(tài)合并表格的步驟

    element 動(dòng)態(tài)合并表格的步驟

    這篇文章主要介紹了element 動(dòng)態(tài)合并表格的步驟,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12
  • 使用Vue實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    使用Vue實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了使用Vue實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 關(guān)于vue中標(biāo)簽的屬性綁定值渲染問題

    關(guān)于vue中標(biāo)簽的屬性綁定值渲染問題

    這篇文章主要介紹了關(guān)于vue中標(biāo)簽的屬性綁定值渲染問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue項(xiàng)目配置同一局域網(wǎng)可使用ip訪問的操作

    vue項(xiàng)目配置同一局域網(wǎng)可使用ip訪問的操作

    這篇文章主要介紹了vue項(xiàng)目配置同一局域網(wǎng)可使用ip訪問的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))

    element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))

    開發(fā)中有時(shí)候需要input只能輸入數(shù)字,下面這篇文章主要給大家介紹了關(guān)于element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Vue實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車小案例

    Vue實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車小案例

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車小案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue2單元測(cè)試環(huán)境搭建

    vue2單元測(cè)試環(huán)境搭建

    本篇文章給大家分享了vue2單元測(cè)試環(huán)境搭建的詳細(xì)步驟,對(duì)此有需要的朋友參考學(xué)習(xí)下。
    2018-05-05

最新評(píng)論

原阳县| 郑州市| 车险| 天气| 略阳县| 永和县| 秀山| 溆浦县| 南汇区| 潼南县| 镇巴县| 荔浦县| 凤台县| 杂多县| 怀宁县| 延寿县| 武山县| 洞口县| 新野县| 徐汇区| 道真| 甘泉县| 海阳市| 仙居县| 治县。| 明溪县| 绍兴县| 安达市| 榆林市| 囊谦县| 容城县| 五大连池市| 大丰市| 正定县| 九江市| 玛多县| 同德县| 玉山县| 沂源县| 天台县| 全州县|