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

news2024/11/27 12:57:56

这里写自定义目录标题

  • 一、 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.coloradmin.cn/o/1218949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Azure 机器学习:使用 Azure 机器学习 CLI、SDK 和 REST API 训练模型

目录 环境准备克隆示例存储库 示例案例在云中训练1.连接到工作区PythonAzure CLIREST API 2. 创建用于训练的计算资源4. 提交训练作业PythonAzure CLIREST API 注册已训练的模型PythonAzure CLIREST API Azure 机器学习提供了多种提交 ML 训练作业的方法。 在本文中&#xff0c…

【linux】查看CPU的使用率

命令1&#xff1a;top top 总体系统信息 uptime&#xff1a;系统的运行时间和平均负载。tasks&#xff1a;当前运行的进程和线程数目。CPU&#xff1a;总体 CPU 使用率和各个核心的使用情况。内存&#xff08;Memory&#xff09;&#xff1a;总体内存使用情况、可用内存和缓存…

监控直流防雷浪涌保护器综合方案

监控系统是一种广泛应用于安防、交通、工业、军事等领域的信息系统&#xff0c;它通过摄像机、传输线路、监控中心等设备&#xff0c;实现对目标区域的实时监视和控制。然而&#xff0c;监控系统也面临着雷电的威胁&#xff0c;雷电可能通过直击雷、感应雷、雷电波侵入等途径&a…

储能领域 / 通讯协议 / 技术栈 等专有名字集锦——主要收集一些储能领域的专有名词,以及相关的名词

目录 名词解释ModbusIOT设备通讯协议 CAN/ RS-485 储能术语电池管理系统BMS电池储能系统相关概念&#xff0c;总控&#xff0c;主控&#xff0c;从控 电池相关知识拆解电池的构成逆变器 电池核心参数SOC 电池剩余容量 名词解释 英文中文biz layer业务层与业务层通信的服务CRC循…

GAT里面的sofamax函数的实现:

1.sofamx 公式&#xff1a; 2. GAT里的sofamax函数的实现&#xff1a; 1. 因为指数在x轴正轴爆炸式地快速增长&#xff0c;如果zi比较大&#xff0c;exp⁡(zi)也会非常大&#xff0c;得到的数值可能会溢出。溢出又分为下溢出&#xff08;Underflow&#xff09;和上溢出&#x…

当攻防演练已成常态,企业应该相信西医还是老中医?

在面对疾病时&#xff0c;很多人常常会犹豫不决&#xff0c;不知道应该选择中医还是西医进行治疗。与疾病斗争的过程也是一场“战斗”&#xff0c;需要选择合适的“武器”和策略。有些人认为西医疗效快&#xff0c;能够迅速缓解症状&#xff1b;而另一些人则认为中医治疗更根本…

llvm源码windows编译

1.克隆llvm源码: git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git 2.创建build文件夹并生成makefile 生成前置条件: cmake ,ninja,python3要先安装 cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Release 生成成功 3.编译 进…

如何用AB测试完善产品激励体系

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 用户激励体系&#xff0c;也称用户激励机制&#xff0c;是为了让用户持续使用产品&#xff0c;而设计的一套对应规则。在用户激励体系建立过程中&#xff0c;产品可…

linux、windows 查看java等进程占用资源情况

linux查看进程占用资源情况&#xff1a; top -o %MEM -b -n 1 | grep java | awk {print "PID: "$1" \t 虚拟内存: "$5" \t 物理内存: "$6" \t 共享内存: "$7" \t CPU使用率: "$9"% \t 内存使用率: "$10"%&…

护眼台灯选购注意事项?考公专用护眼台灯推荐

随着科技的发展和进步&#xff0c;台灯的外观也不在和以往一般笨重&#xff0c;而是变得越来越美观&#xff0c;而且也更方便了&#xff0c;功能也越来越多元化了。台灯作为现在我们日常学习、阅读、办公必备的一盏照明灯具&#xff0c;其光源的舒适度是非常重要的。那么挑选台…

新生儿早产:原因、科普和注意事项

引言&#xff1a; 新生儿早产是指婴儿在孕期不满37周就出生的情况&#xff0c;这对于新生儿的健康和发育可能产生一定的影响。了解新生儿早产的原因以及如何正确应对是非常关键的。本文将科普新生儿早产的原因&#xff0c;提供相关信息&#xff0c;并为父母和监护人提供注意事…

JAVAEE初阶 计算机如何工作

计算机的工作 一.冯诺依曼体系二.CPU基本工作流程1.逻辑门1.1电子开关1.2门电路 2.算术逻辑单元2.1 进制的理解2.2 算术单元2.3逻辑单元 3.寄存器和内存4.控制单元5.指令 一.冯诺依曼体系 二.CPU基本工作流程 1.逻辑门 1.1电子开关 1.2门电路 1.非门 2.与门 3.或门 4.异或…

SQL server从安装到入门(一)

文章目录 彻底安装怎么安装&#xff1f;Polybase要求安装orcale jre 7更新 51或更高版本&#xff1f;安装完怎么配置&#xff1f;没有SSMS&#xff1f; 熟悉一下SMSS&#xff01; 根据本人实际安装和初步使用SQL server的过程中&#xff0c;经历的一些关键性的步骤和精品文章。…

基于springboot实现电子招投标系统【项目源码】

基于springboot实现电子招投标系统演示 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计&#xff0c;其不仅继承了Spring框架原来有的优秀特性&#xff0c;而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原本的Spri…

基于STC12C5A60S2系列1T 8051单片机的SPI总线器件数模芯片TLC5615实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的SPI总线器件数模芯片TLC5615实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍SPI总线器件数模芯片TLC5615介绍通过按…

Shopee买家号有什么作用?如何才能拥有大量的虾皮买家号?

对于卖家而言&#xff0c;用shopee买家号进行测评有以下几点好处&#xff1a; 1、随时随地可以给自己店铺下单、评价、点星 2、成本很低&#xff1a;都是自己准备一些资料进行注册的&#xff0c;因此成本也是比较可控的。 3、自己管理更加安全可控&#xff1a;每个账号都是独…

【AI视野·今日NLP 自然语言处理论文速览 第六十二期】Wed, 25 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 25 Oct 2023 (showing first 100 of 112 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MuSR: Testing the Limits of Chain-of-thought with Multistep Soft R…

APP广告变现痛点,开发者如何解决?

app广告变现对开发者来说&#xff0c;最大的担心是植入广告会影响自身的用户体验&#xff0c;以及该去哪里找到优质的广告主&#xff1f;如何在技术上实现广告植入的正确姿势&#xff0c;从而达成用户、流量、收益三者之间的动态平衡&#xff1f; https://www.shenshiads.com …

软文与硬广的区别是什么,小红书软文营销心得!

随着互联网愈加深入我们生活的方方面面&#xff0c;我们的生活也逐渐适应了互联网的存在&#xff0c;一些传统的阅读方式已经逐渐被我们所忽略&#xff0c;取而代之的则是一种新型产品——软文。今天&#xff0c;就来为大家分享一下软文与硬广的区别是什么&#xff0c;小红书软…

几款开源视频编辑软件的比较

软件特点OpenShot跨平台、免费开源、易于上手、功能丰富Shotcut跨平台、免费开源、支持多种格式、性能强大kdenlive跨平台、开源、功能强大、支持多种滤镜Avidemux跨平台、免费开源、小巧简洁、功能实用 OpenShot 是一款免费开源的视频编辑软件&#xff0c;支持 Windows、macO…