欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間: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 實例上的 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 文件,在任何你想使用的地方導(dǎo)入即可。

import mitt from 'mitt'
export default mitt()

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

<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

需要注意的是,導(dǎo)入的 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進(jìn)行組件通信的文章就介紹到這了,更多相關(guān)Vue3.x mitt.js組件通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue.js 實現(xiàn)點擊按鈕動態(tài)添加li的方法

    vue.js 實現(xiàn)點擊按鈕動態(tài)添加li的方法

    今天小編就為大家分享一篇vue.js 實現(xiàn)點擊按鈕動態(tài)添加li的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 如何巧用Vue緩存函數(shù)淺析

    如何巧用Vue緩存函數(shù)淺析

    有時候不希望已經(jīng)請求過的數(shù)據(jù),再次請求重復(fù)執(zhí)行刷新操作,我們就需要使用數(shù)據(jù)緩存,這篇文章主要給大家介紹了關(guān)于如何巧用Vue緩存函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue 之 css module的使用方法

    vue 之 css module的使用方法

    這篇文章主要介紹了vue 之 css module的使用方法,css module目的為所有類名重新生成類名,有效避開了css權(quán)重和類名重復(fù)的問題,非常具有實用價值,需要的朋友可以參考下
    2018-12-12
  • Vue中實現(xiàn)權(quán)限控制的方法示例

    Vue中實現(xiàn)權(quán)限控制的方法示例

    這篇文章主要介紹了Vue中實現(xiàn)權(quán)限控制的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • ant-design-vue 時間選擇器賦值默認(rèn)時間的操作

    ant-design-vue 時間選擇器賦值默認(rèn)時間的操作

    這篇文章主要介紹了ant-design-vue 時間選擇器賦值默認(rèn)時間的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨過來看看吧
    2020-10-10
  • vue+Element實現(xiàn)分頁效果

    vue+Element實現(xiàn)分頁效果

    這篇文章主要為大家詳細(xì)介紹了vue+Element實現(xiàn)分頁效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue中自定義右鍵菜單插件

    vue中自定義右鍵菜單插件

    這篇文章主要為大家詳細(xì)介紹了vue中自定義右鍵菜單插件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue-router中scrollBehavior的巧妙用法

    vue-router中scrollBehavior的巧妙用法

    本文給大家介紹vue-router中scrollBehavior的妙用,文中給大家提到了兩種解決方案,需要的朋友可以參考下
    2018-07-07
  • 詳解vue beforeEach 死循環(huán)問題解決方法

    詳解vue beforeEach 死循環(huán)問題解決方法

    這篇文章主要介紹了vue beforeEach 死循環(huán)問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Vue使用ElementUI動態(tài)修改table單元格背景顏色或文本顏色

    Vue使用ElementUI動態(tài)修改table單元格背景顏色或文本顏色

    本文主要介紹了Vue使用ElementUI動態(tài)修改table單元格背景顏色或文本顏色,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論