我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue3.x使用mitt.js进行组件通信

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue3.x使用mitt.js进行组件通信

Vue2.x 使用 EventBus 进行组件通信,而 Vue3.x 推荐使用 mitt.js。

比起 Vue 实例上的 EventBus,mitt.js 好在哪里呢?首先它足够小,仅有200bytes,其次支持全部事件的监听和批量移除,它还不依赖 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,封装自定义事务总线文件 mybus.js,创建新的 js 文件,在任何你想使用的地方导入即可。


import mitt from 'mitt'
export default mitt()

方式3,直接在组件里面导入使用。推荐大家使用这种方式,因为分散式更方便管理和排查问题。


<template>
  <img alt="Vue logo" class="lazy" data-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 我们是通过函数调用的形式,不是 new 的方式。在移除事件的需要传入定义事件的名字和引用的函数。

核心原理

原理很简单,就是通过 map 的方法保存函数。经过我的删减代码不到 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 仍然是现有API的一部分,因为它用于触发由父组件以声明方式附加的事件。

到此这篇关于Vue3.x使用mitt.js进行组件通信的文章就介绍到这了,更多相关Vue3.x mitt.js组件通信内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue3.x使用mitt.js进行组件通信

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue组件间如何进行通信

本篇内容介绍了“vue组件间如何进行通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue是数据驱动视图更新的框架, 我们平时开发,都会把
2023-06-21

Vue3全局组件通信之provide/inject怎么使用

本篇内容介绍了“Vue3全局组件通信之provide/inject怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、前言顾名思义,爷
2023-07-06

Vue3 echarts组件化及使用hook进行resize方式

这篇文章主要介绍了Vue3 echarts组件化及使用hook进行resize方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-16

Vue2和Vue3中常用组件通信用法分享

这篇文章主要为大家整理了Vue3的8种和Vue2的12种组件通信的使用方法,文中的示例代码讲解详细,对我们学习Vue有一定的帮助,值得收藏
2023-05-15

Vue3中使用ref标签对组件进行操作方法

这篇文章主要介绍了Vue3中使用ref标签对组件进行操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-16

Android进程间使用Intent进行通信

Android进程间通信(IPC,Inter-ProcessCommunication)底层采用的是Binder机制,具体到应用层有网友根据安卓四大组件将进程间通信方式分为对应的四种方式Activity,Broadcast,ContentProvider,Service
2023-02-28

Angular组件间进行通信的方法有哪些

这篇“Angular组件间进行通信的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Angular组件间进行通信的方
2023-07-04

Android怎么使用GRPC进行通信

这篇文章主要介绍“Android怎么使用GRPC进行通信”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么使用GRPC进行通信”文章能帮助大家解决问题。引言Android作为一个开发平
2023-07-05

Vue2和Vue3中常用组件通信方法有哪些

本篇内容介绍了“Vue2和Vue3中常用组件通信方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vue3 组件通信方式props$e
2023-07-05

Vue3 echarts组件化及使用hook进行resize的方法是什么

echarts组件化及使用hook进行resizehook本质是一个函数,把setup函数中使用的CompositionAPI进行了封装组件化echarts实例import*asechartsfrom"echarts";importuseResizefrom"@/hooks/useResize";//hook代码见下方const{proxy}=getCurrentInstance();//获取实例中的proxyletechart;letechartInst
2023-05-23

Android进程间如何使用Intent进行通信

这篇文章主要介绍“Android进程间如何使用Intent进行通信”,在日常操作中,相信很多人在Android进程间如何使用Intent进行通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android进程
2023-07-05

React父子组件间的通信是如何进行的

本篇内容介绍了“React父子组件间的通信是如何进行的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!父子组件通信方式(1)传递数据(父传子)
2023-07-05

React父子组件间的通信是怎样进行的

这篇文章主要介绍了React中父子组件通信详解,在父组件中,为子组件添加属性数据,即可实现父组件向子组件通信,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
2023-03-14

编程热搜

目录