【Vue】全局事件总线 TodoList 事件总线

目录

一、 实现所有组件看到x事件

二、 实现$on $off 以及 $emit

总结不易~ 本章节对我有很大的收获, 希望对你也是!!!


本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.com

全局事件总线图:

 本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.com

一、 实现所有组件看到x事件

到main.js 里面设置全局总线

import Vue from 'vue'import App from './App.vue'// 关闭Vue生产提示
Vue.config.productionTip = falseVue.prototype.x = { a: 1, b: 2 }// 创建vm
new Vue({el: '#app',render: h => h(App)
})

分别在School 和 Student组件上进行挂载输出当前对象 

现在就是实现了第一个, 能让所有组件看到 x

 本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.com

二、 实现$on $off 以及 $emit

Vue.prototype.x = { a: 1, b: 2 }

由于上面只是一个普通对象, 所以我们没有办法能够访问它的$on, $off以及$emit, 因为这些只存在组件的实例对象中, 那么我们第一件事情就是要创建组件的实例对象。

这个d组件实例对象 就是相当于一个vc 只是一个组件的实例对象~

const Demo = Vue.extend({}) // 创建一个组件
const d = new Demo() // 组件的一个实例对象// Vue.prototype.x = { a: 1, b: 2 }
Vue.prototype.x = d

在School组件内进行事件绑定:

  mounted() {console.log(this.x)// $on 监听一个名字叫 "hello" 的事件,一旦别人触发了这个事件,我就执行后面的代码。// $on 给x绑定了一个'hello' 事件this.x.$on('hello', (data) => {console.log('我是School组件, 收到了数据', data)})},

在Student组件内进行值的传递:

  <button @click="sendStudenName">把学生名给School组件</button>methods: {sendStudenName() {this.x.$emit('hello', 666)}}

可以看到确实起到了全局的作用分别来进行值的输入和接收 

但是定义那么多行的vc实在是过于臃肿,我们就可以直接在创建vm的时候来直接定义全局事件

// 创建vm
new Vue({el: '#app',render: h => h(App),beforeCreate() {// 这里的 $bus 是一个全称Vue.prototype.$bus = this // 这个this本身就是Vue的实例对象// 安装全局事件总线}
})

Student组件用来传值:

<button @click="sendStudenName">把学生名给School组件</button> methods: {sendStudenName() {this.$bus.$emit('hello', this.name)}}

School用两个生命周期钩子进行获取值:分别用来绑定事件 和 解绑解绑事件!

  mounted() {// $on 监听一个名字叫 "hello" 的事件,一旦别人触发了这个事件,我就执行后面的代码。// $on 给x绑定了一个'hello' 事件this.$bus.$on('hello', (data) => {console.log('我是School组件, 收到了数据', data)})},// 销毁之前的钩子// beforeDestroy已经废弃了// 用完了 一定要把傀儡身上的事件解绑beforeUnmount() {this.$bus.$off('hello')}

TodoList全局事件总线传值

虽然我们学习了全局事件总线,任意两个组件之间的通信都非常方便,但是也不是所有组件之间的通信都要用上全局事件总线,就比如:父组件给子组件传递数据,props就极其方便~

但是在TodoList中的MyItem组件跟 App组件之间是爷孙关系 所以用全局事件总线就会比较方便~

因为List组件是没有用到该方法的 而是转手就又传给了Item组件, 所以这里用全局事件总线就会非常方便!

那么我们就需要做到的是直接进行通信, 不在进行逐层传递~

第一步就是创建全局事件总线:

// 创建vm
new Vue({el: '#app',render: h => h(App),beforeCreate() {Vue.prototype.$bus = this}
})

第二步, 清除掉List组件和App组件 以及 Item组件通过props传入的函数:

      <MyList :todos="todos" />

第三步, 确定是Item给App传递数据

  methods: {handleCheck(id) {console.log(id)// this.checkTodo(id)this.$bus.$emit('checkTodo', id)},handleDelete(id) {if(confirm('确定删除吗')) {console.log(id)// this.deleteTodo(id)this.$bus.$emit('deleteTodo', id)}}}

利用全局事件总线 进行触发事件

分别对数据进行添加和删除的时候, 这里都触发的是$bus全局事件~

 本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.com

总结不易~ 本章节对我有很大的收获, 希望对你也是!!!

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

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

相关文章

Python编程virtualenv库的简介和使用方法

Python编程virtualenv库的简介和使用方法 virtualenv和conda的区别是什么

MySQL的行级锁锁的到底是什么?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL的行级锁锁的到底是什么?】面试题。希望对大家有帮助&#xff1b; MySQL的行级锁锁的到底是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL的行级锁是数据库管理系统&#xff08;DBMS&#xff09;的一…

【C++游戏引擎开发】第33篇:物理引擎(Bullet)—射线检测

一、射线检测核心理论体系 1.1 射线检测的数学基础 1.1.1 参数化射线方程 射线在三维空间中的数学表达采用参数方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系统】线程崩溃机制详解

在分布式系统与多线程编程的世界里&#xff0c;一个看似简单的问题却暗藏玄机&#xff1a;当某条线程突然崩溃&#xff0c;其所属进程会随之消亡吗&#xff1f;这个问题背后隐藏着操作系统与编程语言的精妙设计&#xff0c;本文将从底层原理到工程实践层层剖析。 一、线程崩溃…

无人机 | 无人机设计概述

无人机设计是一个复杂的系统工程&#xff0c;涉及空气动力学、电子技术、材料科学、控制算法等多个领域的综合应用。以下是无人机设计的主要模块和关键要素概述&#xff1a; 一、总体设计目标 任务需求定义 用途&#xff1a;航拍、物流、农业、军事侦察、环境监测等性能指标&am…

强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 从 Oracle Database 23ai 开始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列别名。此功能在早期版本的 Oracle Database 中不…

Modbus 转 IEC61850 网关

第一章 产品概述 Modbus 转 IEC61850 网关型号 SG-IEC61850-Modbus &#xff0c;是三格电子推出的工业级网关&#xff08;以 下简称盒子或网关&#xff09;&#xff0c;主要用于 Modbus RTU/TCP 数据采集、 DLT645-1997/2007 数据采集&#xff0c; 可接多功能电力仪表…

MySQL 中的 MVCC 是什么?

MySQL 中的 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09; 是一种用于实现高并发读写操作的机制&#xff0c;它通过维护数据的多个版本来解决读写冲突&#xff0c;从而在保证事务隔离性的同时&#xff0c;减少锁的使用&#xff0c…

【Python】让Selenium 像Beautifulsoup一样,用解析HTML 结构的方式提取元素!

我在使用selenium的find_element的方式去获取网页元素&#xff0c;一般通过xpath、css_selector、class_name的方式去获取元素的绝对位置。 但是有时候如果网页多了一些弹窗或者啥之类的&#xff0c;绝对位置会发生变化&#xff0c;使用xpath等方法&#xff0c;需要经常变动。…

使用xlwings将excel表中将无规律的文本型数字批量转化成真正的数字

之前我写了一篇文章excel表中将无规律的文本型数字批量转化成真正的数字-CSDN博客 是使用excel自带的操作&#xff0c;相对繁琐。 今天使用xlwings操作&#xff0c;表格如下&#xff08;有真正的数字&#xff0c;也有文本型数字&#xff0c;混在在一起&#xff09;&#xff1…

ICML 2025录取率公布,spotlight posters仅占2.6%

近日&#xff0c;ICML 2025公布了论文录用结果。本次大会共收到 12,107篇有效论文投稿&#xff0c;比去年增加了28%&#xff0c;今年录取论文3,260篇&#xff0c;录取率为 26.9%。其中仅有313篇被列为“焦点海报”&#xff08;即所有投稿中排名前2.6%的论文&#xff09;&#x…

全局网络:重构数字时代的连接范式

从局部到全局 —— 网络架构的范式革命 在全球化与数字化深度融合的今天&#xff0c;传统网络架构的 “碎片化” 问题日益凸显&#xff1a;跨地域数据流通低效、设备互联孤岛化、安全策略难以统一。 全局网络作为一种突破地域与技术边界的新型网络架构&#xff0c;正成为企业…

SpringAI实现AI应用-内置顾问

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 3.SpringAI实现AI应用-内置顾问-CSDN博客 4.SpringAI实现AI应用-使用redis持久化聊天记忆-CSDN博客 5.SpringAI实现AI应用-自定义顾问&#xff08;Advisor&#xff09…

Nginx核心原理以及案例分析(AI)

一、Nginx核心原理分析 1. ‌事件驱动与非阻塞模型‌ ‌Epoll异步机制‌&#xff1a;基于Linux的epoll模型实现异步非阻塞I/O处理&#xff0c;单线程可高效管理数万并发连接&#xff0c;避免传统select模型的轮询性能瓶颈。‌多进程架构‌&#xff1a;采用Master-Worker模式&…

【Bug经验分享】SourceTree用户设置必须被修复/SSH 主机密钥未缓存(踩坑)

文章目录 配置错误问题原因配置错误问题解决主机密钥缓存问题原因主机密钥缓存问题解决 更多相关内容可查看 配置错误问题原因 电脑太卡&#xff0c;曾多次强制关机&#xff0c;在关机前没有关闭SourceTree&#xff0c;导致配置错误等问题 配置错误问题解决 方式一&#xff…

阿里云服务器-centos部署定时同步数据库数据-dbswitch

前言&#xff1a; 本文章介绍通过dbswitch工具实现2个mysql数据库之间实现自动同步数据。 应用场景&#xff1a;公司要求实现正式环境数据库数据自动冷备 dbswitch依赖环境&#xff1a;git ,maven,jdk 方式一&#xff1a; 不需要在服务器中安装git和maven&#xff0c;直接用…

windows10 环境下通过huggingface_hub下载huggingface社区模型

项目场景&#xff1a; 有一些模型需要在huggingface下载&#xff0c;因为国内限制&#xff0c;一般无法访问huggingface网站进行下载。然而&#xff0c;可以通过国内的镜像下载。网上大部分都是在linux系统下&#xff0c;通过huggingface提供的指令下载。本文针对采用python脚…

C++之异常

目录 前言 一、什么是异常 二、C中的异常 2.1 C语言中的异常处理 2.2 C中的异常处理 2.3 异常的抛出与捕获 2.4 栈展开 2.5 查找匹配的处理代码 2.6 异常重新抛出 2.7 异常安全问题 2.8 异常规范 2.9 标准库的异常 前言 在之前我们已经学习了C中不少知识了&#xff0c;但是其中…

$在R语言中的作用

在 R 语言中&#xff0c;$ 是一个非常重要的操作符&#xff0c;主要用于访问对象的成员或组件。它的用途非常广泛&#xff0c;不仅限于数据框&#xff08;data frame&#xff09;&#xff0c;还可以用于列表&#xff08;list&#xff09;、环境&#xff08;environment&#xf…

设计一个分布式系统:要求全局消息顺序,如何使用Kafka实现?

一、高吞吐低延迟 Kafka 集群设计要点 1. 分区策略优化 // 计算合理分区数公式&#xff08;动态调整&#xff09; int numPartitions max(Tp, Tc) / min(Tp, Tc) // Tp生产者吞吐量 Tc消费者吞吐量建议初始按业务键&#xff08;如订单ID&#xff09;哈希分区单分区吞吐建议…