Vue学习计划-Vue2--VueCLi(五)全局事件总线、消息订阅与发布(pubsub)

抛出问题:我们多级组件,或者任意不想关的子组件如何传递数据呢?

1. 全局事件总线($bus

  1. 一种组件间通信的方式,适用于任意组件间通信

  2. 全局事件总线示意图:
    在这里插入图片描述

  3. 安装全局事件总线:

new Vue({
    ....
    beforeCreate(){
        Vue.prototype.$bus = this // 安装全局事件总线,$bus就相当于vm
    }
})
  1. 使用事件总线:
    1. 接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身
    methods: {
        demo(data){.....}
    },
    mounted(){
        this.$bus.$on('xxx', this.demo)
    }
    
    1. 提供数据: this.$bus.$emit('xxx', 数据)
  2. 最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件

示例:我们继续使用Vue学习计划-Vue2–VueCLi(四)组件传值和自定义事件示例中的4个组件:父组件APP.vue,子组件SelectInput.vueSelectList .vueSelectMulDel.vue,我们这里只更拿App.vueSelectInput.vue为例
1. 在main.js中安装全局事件总线:

2. 子组件SelectInput.vue内提供数据:
在这里插入图片描述
3. 父组件App.vue内给$bus绑定事件,并在beforeDestroy中销毁绑定事件:
在这里插入图片描述

2. 消息订阅与发布(pubsub

  1. 一种组件间通信的方式,适用于任意组件间通信
  2. 使用步骤:
    1. 安装pubsub: npm i pubsub-js或者yarn add pubsub-js或者cnpm i pubsub-js
    2. 引入: import PubSub from 'pubsub-js'
    3. 接收数据: A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身
    methods: {
        demo(data){.....}
    },
    mounted(){
        this.pid = PubSub.subscribe('xxx', this.demo) // 订阅消息
    }
    
    1. 提供数据: PubSub.publish('xxx', 数据)
    2. 最好在beforeDestroy钩子中,用PubSub.unsubscribe(pid)去取消订阅

示例:拿$busApp.vueSelectInput.vue为:

  1. 安装依赖;不需要main.js内写任何内容,但是需要在用到订阅发布的依赖组件内手动引入

  2. 修改SelectInput.vue组件:
    在这里插入图片描述

  3. 修改App.vue组件:
    在这里插入图片描述

  4. 总结一下:其实不管是全局事件总线还是消息订阅与发布,我们都可以看出来,其实本质都是一样的:将自定义事件和数据存到一个公共的空间内,谁用谁去调。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ES 如何将国际标准时间格式进行格式化与调整时区

需求,日志收集的时候,时间格式是国际标准时间格式。形如yyyy-MM-ddTHH:mm:ss.SSS。 (2023-12-05T02:45:50.282Z)这个时区也不对,那如何将此类型的时间,进行格式化呢? 本篇文章体统一个案例&…

前端非常好用的免费网页工具推荐(值得收藏)

1、iloveimg 可在线进行图片编辑、压缩、转换等功能,操作方便,完全免费 2、草料二维码 可在线进行文本、网站、文件、图片、微信等二维码生成 3、比特虫 在线制作网站 ico 图标 4、facicongrabber 免费网页 favicon 提取 5、bazhan.wang 在线扒站工…

上海亚商投顾:沪指收复3000点,房地产板块集体走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡,创业板指走势较弱,科创50指数跌近1%。房地产板块集体走强&#xff0…

系统的安全性设计

要设计一个安全的系统,除了要了解一些前面讲到的常用的保护手段和技术措施外,还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识,这样才能对系统的安全作有针对性的设计和强化,即“知己知彼,百战百胜”。 下…

调用第三方http接口 hutool工具类

1、引入依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.0.M2</version> </dependency>2、请求组装 String params"<BSXml>" " <MsgHeader>&…

Vue3上传图片和删除图片

<div class"illness-img"><van-uploader:after-read"onAfterRead"delete"onDeleteImg"v-model"fileList"max-count"9":max-size"5 * 1024 * 1024"upload-icon"photo-o"upload-text"上传图…

GaussDB如何创建和管理视图

GaussDB如何创建和管理视图 一、什么是视图 当用户对数据库中的一张或者多张表的某些字段的组合感兴趣&#xff0c;而又不想每次键入这些查询时&#xff0c;用户就可以定义一个视图&#xff0c;以便解决这个问题。 视图与基本表不同&#xff0c;不是物理上实际存在的&#x…

静态HTTP应用的性能优化技巧

在Web开发中&#xff0c;静态HTTP应用以其简单、快速和安全的特点受到了广泛欢迎。然而&#xff0c;随着Web应用的规模不断扩大&#xff0c;性能问题也日益突出。本文将为你介绍一些静态HTTP应用的性能优化技巧&#xff0c;让你的应用飞得更快、更稳定。 一、压缩文件 文件压…

iPhone手机中备忘录如何改变字体颜色

作为一名iPhone用户&#xff0c;我经常使用手机备忘录来记录生活中的点点滴滴。这样&#xff0c;我的大脑就能从繁琐的记忆任务中解脱出来&#xff0c;专注于更重要的事情。 而且&#xff0c;我有一个特别的习惯&#xff0c;那就是使用不同颜色的字体来区分不同的备忘录。这样…

基于SpringBoot的就业信息管理系统设计与实现(源码+数据库+文档)

摘 要 在新冠肺炎疫情的影响下&#xff0c;大学生的就业问题已经变成了一个引起人们普遍重视的社会焦点问题。在这次疫情的冲击之下&#xff0c;大学生的就业市场的供求双方都受到了不同程度的影响&#xff0c;大学生的就业情况并不十分乐观。目前&#xff0c;各种招聘平台上…

解决:Component name “index“ should always be multi-word

原因 要求组件名称以驼峰格式命名&#xff0c;自定义组件名称应该由多单纯组成&#xff0c;防止和html标签冲突&#xff0c;所以index.vue 会报错 解决 1、按照规则驼峰格式&#xff0c;如&#xff1a;appIndex.vue 2、若有.eslintrc.js文件&#xff0c;并在规则中(rules)关…

【数字电路】MacBook使用iverilog进行数字电路仿真

安装流程 在终端中用brew包管理工具进行安装仿真工具&#xff1a; 编译verilog代码&#xff1a; brew install icarus-verilog编译verilog代码&#xff1a; brew install verilatorMacOS系统显示UNIX GUI brew install xquartz可视化仿真波形图&#xff1a; brew install gtk…

柯桥西班牙语里最“好用”的脏话:一些关于cojones的表达

Creo que una de las palabras con ms contextos donde se puede utilizar y que adems pronto es conocida por los estudiantes de espaol es esta que est en el ttulo. 相信标题中的这个单词“cojones”&#xff0c;使用时总是包含很多含义&#xff0c;同时也是西语学习者最…

郝斌C语言自学教程笔记

赫斌C语言——笔记目录 c语言编程预备知识流程控制函数变量指针结构体位运算符 前段时间康哥看我C语言基础不牢,推荐我学习郝斌老师的C语言课程&#xff0c;花2周看完之后发现确实是目前所看的C语言课程中最好的&#xff0c;不仅非常适合入门&#xff0c;而且对即使学了几年C语…

ARM开发

ARM课程介绍 课程特点 ARM开发 --> Linux移植 --> 驱动开发 前后联系&#xff1a;ARM和系统移植为驱动开发学习做准备工作 所需知识&#xff1a;C语言基础及STM32需要的硬件知识 课程要求 目标&#xff1a;学习程序运行原理、硬件的控制原理 会看原理图、芯片手册、学习…

MVVM前端设计模式的发展与应用

在MVC模式中&#xff0c;随着代码量越来越大&#xff0c;Controller主要用来处理各种逻辑和数据转化的Controller首当其冲&#xff0c;变得非常庞大&#xff0c;MVC的简写变成了Massive-View-Controller&#xff08;意为沉重的Controller&#xff09; 我曾经接手老项目&#x…

ChatGPT对话为什么不用WebSocket而使用EventSource?

文章目录 1. 引言2. WebSocket和EventSource简介2.1 WebSocket2.2 EventSource 3. ChatGPT对话系统的特点4. EventSource的优势4.1 简单易用4.2 容错性强4.3 兼容性良好 5. 为何选择EventSource而非WebSocket&#xff1f;5.1 单向通信模式5.2 长轮询模式5.3 简化部署和维护 6. …

java导出excel通用工具(POI,类注解形式)

通过给类定义注解(设置名称&#xff0c;设置kv转换值)&#xff0c;然后利用设置的名称和传入的数据进行导出。 只需要在项目添加两个工具类就可以实现excel导出功能。 1、单sheet 步骤&#xff1a;1、根据业务需求定义导出的类&#xff0c;并设置表头名称。 …

gitee创建一个新仓库和提交代码到码云

gitee创建一个新的项目并提交到码云 新建一个仓库 填写创建基本信息 以这个新创建的仓库保存项目所有的代码 在IDEA中克隆这个项目 从版本控制中新建一个git项目 从码云成功克隆项目 创建微服务模块 创建第商品模块 以以上同样的步骤完成下面几个模块的创建 聚合总…

Tita集成无代码API:电商客服与营销系统的升级

API的力量&#xff1a;优化电商与客服系统的无代码集成解决方案 在数字化转型的时代&#xff0c;电商与客服系统的高效运作对于企业的成功至关重要。无代码API平台Tita为此提供了一站式解决方案&#xff0c;使企业在无需深入的代码开发工作的前提下&#xff0c;便能实现各种系…