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

Vue3.x使用mitt.js進行組件通信

 更新時間:2021年06月16日 15:29:26   作者:前端精髓  
Vue2.x 使用 EventBus 進行組件通信,而 Vue3.x 推薦使用 mitt.js。本文就介紹一下mitt.js的具體使用方法,感興趣的可以了解一下

Vue2.x 使用 EventBus 進行組件通信,而 Vue3.x 推薦使用 mitt.js。

比起 Vue 實例上的 EventBus,mitt.js 好在哪里呢?首先它足夠小,僅有200bytes,其次支持全部事件的監(jiān)聽和批量移除,它還不依賴 Vue 實例,所以可以跨框架使用,React 或者 Vue,甚至 jQuery 項目都能使用同一套庫。

快速開始

npm install --save mitt

方式1,全局總線,vue 入口文件 main.js 中掛載全局屬性。

import { createApp } from 'vue';
import App from './App.vue';
import mitt from "mitt"

const app = createApp(App)
app.config.globalProperties.$mybus = mitt()

方式2,封裝自定義事務(wù)總線文件 mybus.js,創(chuàng)建新的 js 文件,在任何你想使用的地方導入即可。

import mitt from 'mitt'
export default mitt()

方式3,直接在組件里面導入使用。推薦大家使用這種方式,因為分散式更方便管理和排查問題。

<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <HelloWorld msg="Hello Vue 3.0 + Vite" />
</template>

<script>
import mitt from 'mitt'
import HelloWorld from './components/HelloWorld.vue'

export default {
  components: {
    HelloWorld
  },
  setup (props) {
    const formItemMitt = mitt()
    return {
      formItemMitt
    }
  }
}
</script>

使用方式

其實 mitt 的用法和 EventEmitter 類似,通過 on 方法添加事件,off 方法移除,clear 清空所有。

import mitt from 'mitt'

const emitter = mitt()

// listen to an event
emitter.on('foo', e => console.log('foo', e) )

// listen to all events
emitter.on('*', (type, e) => console.log(type, e) )

// fire an event
emitter.emit('foo', { a: 'b' })

// clearing all events
emitter.all.clear()

// working with handler references:
function onFoo() {}
emitter.on('foo', onFoo)   // listen
emitter.off('foo', onFoo)  // unlisten

需要注意的是,導入的 mitt 我們是通過函數(shù)調(diào)用的形式,不是 new 的方式。在移除事件的需要傳入定義事件的名字和引用的函數(shù)。

核心原理

原理很簡單,就是通過 map 的方法保存函數(shù)。經(jīng)過我的刪減代碼不到 30 行。

export default function mitt(all) {
 all = all || new Map();

 return {
  all,

  on(type, handler) {
   const handlers = all.get(type);
   const added = handlers && handlers.push(handler);
   if (!added) {
    all.set(type, [handler]);
   }
  },

  off(type, handler) {
   const handlers = all.get(type);
   if (handlers) {
    handlers.splice(handlers.indexOf(handler) >>> 0, 1);
   }
  },

  emit(type, evt) {
   ((all.get(type) || [])).slice().map((handler) => { handler(evt); });
   ((all.get('*') || [])).slice().map((handler) => { handler(type, evt); });
  }
 };
}

Vue3 從實例中完全刪除了 $on、$off 和 $once 方法。$emit 仍然是現(xiàn)有API的一部分,因為它用于觸發(fā)由父組件以聲明方式附加的事件。

到此這篇關(guān)于Vue3.x使用mitt.js進行組件通信的文章就介紹到這了,更多相關(guān)Vue3.x mitt.js組件通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中子組件調(diào)用父組件的3種方法實例

    Vue中子組件調(diào)用父組件的3種方法實例

    vue子組件調(diào)用父組件的方法其實不難,最近整理了一下,下面這篇文章主要給大家介紹了關(guān)于Vue中子組件調(diào)用父組件的3種方法,需要的朋友可以參考下
    2022-05-05
  • 解決vue-element-admin安裝依賴npm install報錯問題

    解決vue-element-admin安裝依賴npm install報錯問題

    這篇文章主要介紹了解決vue-element-admin安裝依賴npm install報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue中的@blur/@focus事件解讀

    Vue中的@blur/@focus事件解讀

    這篇文章主要介紹了Vue中的@blur/@focus事件解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue中如何防止用戶頻繁點擊按鈕詳解

    vue中如何防止用戶頻繁點擊按鈕詳解

    在后臺使用過程中經(jīng)常會因為按鈕重復點擊,而造成發(fā)送多次重復請求 以下方法可以避免這種情況,下面這篇文章主要給大家介紹了關(guān)于vue中如何防止用戶頻繁點擊按鈕的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 通過實例講解vue組件之間的傳值

    通過實例講解vue組件之間的傳值

    通過Vuex共享數(shù)據(jù),官方給出的跨多組件傳遞數(shù)據(jù)的解決方案,下面這篇文章主要給大家介紹了關(guān)于vue組件之間傳值的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Vue中父組件向子組件通信的方法

    Vue中父組件向子組件通信的方法

    可以使用props將父組件的數(shù)據(jù)傳給子組件。子組件在接受數(shù)據(jù)時要顯示聲明props。下面通過一個例子給大家介紹Vue中父組件向子組件通信的方法,需要的朋友參考下吧
    2017-07-07
  • 詳解vue-amap引入高德JS API的原理

    詳解vue-amap引入高德JS API的原理

    vue-amap是對高德地圖JS API進行封裝的、適用于vue項目的地圖組件庫,本文主要介紹了vue-amap引入高德JS API的原理,具有一定的參考價值,感興趣的可以了解一下
    2022-06-06
  • Vue實現(xiàn)自定義下拉菜單功能

    Vue實現(xiàn)自定義下拉菜單功能

    這篇文章主要介紹了Vue實現(xiàn)自定義下拉菜單功能,文章先通過實例代碼給大家介紹,后面對用到的知識點總結(jié),需要的朋友可以參考下
    2018-07-07
  • vue+echarts實現(xiàn)數(shù)據(jù)實時更新

    vue+echarts實現(xiàn)數(shù)據(jù)實時更新

    這篇文章主要為大家詳細介紹了vue+echarts實現(xiàn)數(shù)據(jù)實時更新,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue如何將style私有化

    vue如何將style私有化

    在?Vue.js?中,你可以通過多種方式將樣式私有化,以確保樣式只作用于特定的組件,避免全局污染,本文整理了一些常用的方法,希望對大家有所幫助
    2024-11-11

最新評論

濉溪县| 长泰县| 陈巴尔虎旗| 安龙县| 页游| 天柱县| 淳化县| 泉州市| 得荣县| 石嘴山市| 沿河| 富川| 武夷山市| 政和县| 临夏县| 澎湖县| 通城县| 敦化市| 五原县| 沭阳县| 石城县| 德钦县| 新田县| 本溪市| 蒙阴县| 图木舒克市| 游戏| 苍梧县| 临洮县| 沽源县| 永州市| 江川县| 隆林| 枣强县| 灌云县| 建始县| 治县。| 岳阳市| 双柏县| 保山市| 荣昌县|