vue3探索——组件通信之事件总线

这篇具有很好参考价值的文章主要介绍了vue3探索——组件通信之事件总线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

比起Vue实例上的EventBusmitt.js好在哪里呢?首先它足够小,仅有200bytes,其次支持全部事件的监听和批量移除,它还不依赖Vue实例,所以可以跨框架使用,React或者Vue,甚至jQuery项目都能使用同一套库。文章来源地址https://www.toymoban.com/news/detail-657691.html

安装

  • 使用yarn安装
yarn add mitt
  • 或者通过npm安装
npm install --save mitt

官方使用案例

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

示例

  • 可以封装一个ES模块,对外暴露一个mitt实例
// src/common/bus.js

// 引入mitt插件
import mitt from 'mitt';
const $bus = mitt();
export default $bus;
  • 挂载到Vue全局变量上
// src/main.ts

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'

import $bus from './bus/index.ts'

const app = createApp(App);
app.config.globalProperties.$bus = $bus;

app.mount('#app');
  • 在父组件中使用
// src/App.vue

<template>
  <div>
    <button @click="giveMoney(200)">打钱</button>
    <Son></Son>
  </div>
</template>

<script lang="ts" setup>
import Son from './components/son.vue';
import { getCurrentInstance } from 'vue';

const { proxy }: any = getCurrentInstance();
const $bus = proxy.$bus;

function giveMoney(num: number) {
	// 通过emit方法触发
  $bus.emit('add', num);
}
</script>
  • 在子组件中使用
// src/components/son.vue

<template>
    <div>
        <h2>I am son</h2>
        <p>我收到了{{ money || 0 }}¥</p>
    </div>
</template>

<script lang="ts" setup>
import { ref, getCurrentInstance } from 'vue';

const { proxy }: any = getCurrentInstance();
const $bus = proxy.$bus;

const money = ref(0);

// 通过on方法监听
$bus.on('add', (number: number) => {
    // console.log(number);
    money.value = number;
});
</script>
  • 移除事件
// src/App.vue

<button @click="$bus.off('add')">卸载bus总线</button>
<button @click="$bus.all.clear()">卸载所有bus总线</button>

到了这里,关于vue3探索——组件通信之事件总线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3探索——组件通信之依赖注入

    通常情况下,当我们需要从父组件向子组件传递数据时,会使用  props 。想象一下这样的结构:有一些多层级嵌套的组件,形成了一颗巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分数据。在这种情况下,如果仅使用 props 则必须将其沿着组件链逐级传递

    2024年02月10日
    浏览(30)
  • vue3探索——组件通信之v-model父子组件数据同步

    再很多场景中,我们可能想在子组件中修改父组件的数据,但事实上,vue不推荐我们这么做,因为数据的修改不容易溯源。 在vue2中,我们使用 .sync 修饰符+自定义事件 \\\'update:xxx\\\' ,来使父子组件数据同步。 这里不作过多说明,有需要请自行了解。 vue3的写法与vue2基本一致。最

    2024年02月11日
    浏览(45)
  • Vue面试题:如何使用事件总线进行组件间数据传输?

    问题: 假设你正在为一个大型企业级Vue应用程序编写代码,并且需要在多个组件之间传递数据。其中一个组件需要从另一个组件中获取数据,但是这个组件可能还没有加载完成。在这种情况下,你会采取什么措施来确保数据的可靠传输?请提供代码示例来解释你的解决方案。

    2023年04月09日
    浏览(26)
  • 【Vue技巧】Vue2和Vue3组件上使用v-model的实现原理

    ChatGPT4.0国内站点,支持GPT4 Vision 视觉模型:海鲸AI 在Vue中, v-model 是一个语法糖,用于在输入框、选择框等表单元素上创建双向数据绑定。当你在自定义组件中实现 v-model 功能时,你需要理解它背后的原理: v-model 实际上是一个属性和一个事件的简写。 在 Vue 2.x 中, v-mode

    2024年01月15日
    浏览(49)
  • Vue2-全局事件总线、消息的订阅与发布、TodoList的编辑功能、$nextTick、动画与过渡

    🥔:高度自律即自由 更多Vue知识请点击——Vue.js 一种组件间通信的方式,适用于任意组件间通信。通俗理解就是一个定义在所有组件之外的公共嘎达,这个嘎达可以有vm或vc上的同款 $on、$off、$emit ,也可以让所有组件都访问到。要想实现这个事情,只能在 Vue.prototype 上添加

    2024年02月11日
    浏览(29)
  • vue3中事件总线mitt(第三方库mitt)

    1.安装mitt:npm install mitt -save 2. 新建EventBus.js文件: 3.发出事件的页面:bb.vue 4.接收事件的页面:dd.vue 5.点击bb页面按钮:

    2024年02月14日
    浏览(33)
  • Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

    目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 在上篇文章我们介绍了父子组件之间的传值通信,本文将介绍不仅限

    2024年02月05日
    浏览(35)
  • vue2与vue3项目中,分别使用element组件的message消息提示只出现一次的实现

    比如出现以上现象,想要让上一次提示没有结束,下一次提示不会出现就可以用以下方法解决 解决后的现象一:上一次提示框显示后,提示框出现的提示时间没有结束,再次点击,提示框不会有反应,在该提示的时间内一只显示,下一次提示不会出现,直到该提示的时间过了

    2024年02月02日
    浏览(27)
  • Vue2:给组件绑定自定义事件

    我们在页面开发中,难免要使用事件。 在之前的学习中,我们学过 @click、@keyup、@change 等事件,这些是 Vue 自带的事件。 它一般是用在原生的HTML元素上的。在组件上使用需要加 native 修饰 比如: 这一篇说的自定义事件,可以绑定到我们自己的 Vue 组件上。 实现 子组件给父组

    2024年01月19日
    浏览(31)
  • vue3到vue2组件重构方法笔记

    这两天的任务是把一批做好的vue3组件放在vue2项目中使用,将组合式api分散开有一些零散的技巧,所以写一篇转化笔记以供大家参考 先上vue3一个组件的示例代码 上面是其中一个vue3组件样式表,在vue3的项目中展示效果为下图所示: 组件中还有一些其他的功能都要完整保留,

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包