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

Vue3.x使用mitt.js進(jìn)行組件通信

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

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

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

快速開(kāi)始

npm install --save mitt

方式1,全局總線(xiàn),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ù)總線(xiàn)文件 mybus.js,創(chuàng)建新的 js 文件,在任何你想使用的地方導(dǎo)入即可。

import mitt from 'mitt'
export default mitt()

方式3,直接在組件里面導(dǎo)入使用。推薦大家使用這種方式,因?yàn)榉稚⑹礁奖愎芾砗团挪閱?wèn)題。

<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>

使用方式

其實(shí) mitt 的用法和 EventEmitter 類(lèi)似,通過(guò) 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

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

核心原理

原理很簡(jiǎn)單,就是通過(guò) map 的方法保存函數(shù)。經(jīng)過(guò)我的刪減代碼不到 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 從實(shí)例中完全刪除了 $on、$off 和 $once 方法。$emit 仍然是現(xiàn)有API的一部分,因?yàn)樗糜谟|發(fā)由父組件以聲明方式附加的事件。

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

相關(guān)文章

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

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

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

    解決vue-element-admin安裝依賴(lài)npm install報(bào)錯(cuò)問(wèn)題

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

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

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

    vue中如何防止用戶(hù)頻繁點(diǎn)擊按鈕詳解

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

    通過(guò)實(shí)例講解vue組件之間的傳值

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

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

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

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

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

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

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

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

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

    vue如何將style私有化

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

最新評(píng)論

呼和浩特市| 衡阳县| 奉贤区| 古丈县| 公主岭市| 赫章县| 丹阳市| 靖江市| 博野县| 武川县| 石嘴山市| 固原市| 若尔盖县| 永福县| 连州市| 曲阜市| 丘北县| 桂阳县| 安吉县| 宁蒗| 平阴县| 岢岚县| 剑河县| 十堰市| 平谷区| 平邑县| 板桥市| 石泉县| 宜君县| 烟台市| 榕江县| 金秀| 晋中市| 肥城市| 怀化市| 通江县| 鸡西市| 仙居县| 惠州市| 常德市| 纳雍县|