Vue bus事件总线的原理与使用

这里写自定义目录标题

  • 一、 Vue Bus 总线原理
  • 二、Vue bus的使用
      • 1、创建总线: 在 Vue 应用中,可以创建一个 Vue 实例作为总线,用于管理事件。
      • 2、事件的发布与订阅: 组件通过订阅事件来监听总线上的消息,而其他组件则通过发布事件来触发消息。
      • 3、销毁总线: 在组件销毁时,应该取消对事件的订阅以防止内存泄漏。
      • 4、注意:
  • 三、Vue bus 实际应用
      • 场景
      • 示例代码

一、 Vue Bus 总线原理

Vue Bus 是一种事件总线的实现方式,用于在不同组件之间进行通信。在 Vue 应用中,父子组件通信相对简单,但当需要在非父子关系的组件之间进行通信时,就需要借助一种中央事件总线的机制,这就是 Vue Bus 的作用。
在这里插入图片描述
说白就是建一个空白的vue,里面只处理 $emit 事件发布、$on事件监听触发 以及 $off 事件销毁,来完成多层不同组件之间的通行。

二、Vue bus的使用

1、创建总线: 在 Vue 应用中,可以创建一个 Vue 实例作为总线,用于管理事件。

// bus.js
import Vue from 'vue';
export const bus = new Vue();

2、事件的发布与订阅: 组件通过订阅事件来监听总线上的消息,而其他组件则通过发布事件来触发消息。

// ComponentA.vue
import { bus } from './bus.js';export default {methods: {handleClick() {bus.$emit('custom-event', 'Hello from Component A!');},},
};
// ComponentB.vue
import { bus } from './bus.js';export default {mounted() {bus.$on('custom-event', (message) => {console.log(message); // Hello from Component A!});},
};

3、销毁总线: 在组件销毁时,应该取消对事件的订阅以防止内存泄漏。

// ComponentB.vue
export default {beforeDestroy() {bus.$off('custom-event');},
};

4、注意:

  1. bus总线的on执行先与emit
    原因:父子生命周期顺序的影响,父beforeCreate-父created-父beforeMount-子beforeCreate-子created-子beforeMount-子mounted-父mounted
  2. bus总线的emit不适宜写在creted中,要写在mounte钩子函数中。
    原因:on是要早于emit,而且受父子生命周周期的影响,emit要写在nounted函数里。
  3. 发布事件在使用完后,记得off 注销事件,防止内存泄漏。

三、Vue bus 实际应用

场景

考虑一个购物车的应用,有一个商品列表组件和一个购物车组件,它们之间需要实现添加商品到购物车的功能。

示例代码

<!-- ProductList.vue -->
<template><div><div v-for="product in products" :key="product.id"><p>{{ product.name }}</p><button @click="addToCart(product)">Add to Cart</button></div></div>
</template><script>
import { bus } from './bus.js';export default {data() {return {products: [{ id: 1, name: 'Product A' },{ id: 2, name: 'Product B' },{ id: 3, name: 'Product C' },],};},methods: {addToCart(product) {bus.$emit('add-to-cart', product);},},
};
</script>
<!-- ShoppingCart.vue -->
<template><div><h2>Shopping Cart</h2><ul><li v-for="item in cartItems" :key="item.id">{{ item.name }}</li></ul></div>
</template><script>
import { bus } from './bus.js';export default {data() {return {cartItems: [],};},mounted() {bus.$on('add-to-cart', (product) => {this.cartItems.push(product);});},beforeDestroy() {bus.$off('add-to-cart');},
};
</script>

在这个例子中,ProductList 组件通过 Vue Bus 发送了一个 ‘add-to-cart’ 事件,而 ShoppingCart 组件监听了这个事件,并在事件发生时将商品添加到购物车中。

这就是 Vue Bus 的基本原理和一个实际应用的例子。通过这种方式,不同组件之间可以更轻松地进行通信,提高了组件之间的灵活性和复用性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/188443.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

畅捷通+数环通iPaaS,实现无代码集成上千款应用

01 关于畅捷通 畅捷通信息化服务专家,为用户提供在线财务软件,云进销存管理软件,移动办公软件,帮助小微企业人、财、货、客的管理,全面服务小微企业并提供社交化、个性化、服务化、小量化的生意管理支持。 企业除了畅捷通&#xff0c;还有大大小小其他的系统&#xff0c;面临着…

C++中静态成员变量和普通成员变量、私有成员变量和公有成员变量的区别

本文主要介绍和记录C中静态成员变量和普通成员变量、私有成员变量和公有成员变量的区别&#xff0c;并给出相关示例程序&#xff0c;最后结合相关工程应用中编译报错给出报错原因及介绍思路 一、静态成员变量和普通成员变量 C中&#xff0c;静态成员变量和普通成员变量有一些重…

Kafka学习笔记(一)

目录 第1章 Kafka概述1.1 消息队列&#xff08;Message Queue&#xff09;1.1.1 传统消息队列的应用场景1.1.2 消息队列的两种模式 1.2 定义 第2章 Kafka快速入门2.1 安装部署2.1.1 集群规划2.1.2 jar包下载2.1.3 集群部署 2.2 Kafka命令行操作 第3章 Kafka架构深入3.1 Kafka工…

蘑菇街获得mogujie商品详情 API 返回值说明

速卖通API接口是速卖通平台提供的一种数据交换接口&#xff0c;可以帮助卖家快速获取平台上的商品信息、订单信息、用户信息等数据&#xff0c;以便在自己的应用程序中进行展示、管理或分析。 速卖通API接口可以通过以下步骤进行使用&#xff1a; 注册速卖通账号并获取API密钥…

广州华锐互动VRAR:利用VR开展刑事案件公安取证培训,沉浸式体验提升实战能力

随着科技的飞速发展&#xff0c;虚拟现实(VR)技术为我们的生活和工作带来了前所未有的便利。近年来&#xff0c;VR技术在刑事案件公安取证培训中的应用逐渐显现出其独特优势。通过模拟真实的犯罪现场&#xff0c;VR技术为学员提供了沉浸式的体验&#xff0c;使他们在安全的环境…

vite+vue3+ts中watch和watchEffct的使用

vitevue3ts中watch和watchEffct的使用 本文目录 vitevue3ts中watch和watchEffct的使用watchrefreactivepropsimmediate组合监听 watchEffect单值多值侦听副作用停止监听 watch vue官方文档&#xff1a;https://cn.vuejs.org/api/reactivity-core.html#watch 可以监听基础类型&…

2023年【陕西省安全员B证】考试题库及陕西省安全员B证找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员B证考试题库是安全生产模拟考试一点通生成的&#xff0c;陕西省安全员B证证模拟考试题库是根据陕西省安全员B证最新版教材汇编出陕西省安全员B证仿真模拟考试。2023年【陕西省安全员B证】考试题库及陕西省…

修改YOLOv5的模型结构第二弹

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 上节说到了通过修改YOLOv5的common.py来修改模型的结构&#xff0c;修改的是模块的内…

ArcGIS创建格网

目录 1、创建网格 2、裁剪边界外的网格 3、只保留边界内完整的网格 1、创建网格 首先&#xff0c;我们在创建渔网前&#xff0c;需要指定渔网覆盖的范围。这里我们就以四子王为例 在ArcMap软件中&#xff0c;我们依次选择“Toolboxes”→“Data Management Tools&#xff0…

vscode中vue项目引入的组件的颜色没区分解决办法

vscode中vue项目引入的组件的颜色没区分解决办法 图中引入组件和其他标签颜色一样没有区分&#xff0c;让开发者不易区分&#xff0c;很蓝瘦 这个就很直观&#xff0c;解决办法就是你当前的vscode版本不对&#xff0c;你得去找找其他版本&#xff0c;我的解决办法就是去官网历…

交易者最看重什么?anzo Capital这点最重要!

交易者最看重什么&#xff1f;有人会说技术&#xff0c;有人会说交易策略&#xff0c;有人会说盈利&#xff0c;但anzo Capital认为Vishal 最看重的应该是眼睛吧&#xff01; 29岁的Vishal Agraval在9年前因某种原因失去了视力&#xff0c;然而&#xff0c;他的失明并未能阻…

国内外优秀的六款项目管理软件推荐

在面对各种项目管理需求时&#xff0c;选择适合的软件非常重要&#xff0c;项目管理软件不但帮助项目经理更准确的把控项目进度&#xff0c;也使分布在各地的团队能够更高效地合作。 下面是国内外优秀的六款项目管理软件&#xff1a; 1、进度猫 进度猫作为国产项目进度管理…