KOI技术-事件驱动编程(前端)

请添加图片描述

1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》
2. “总是有人要赢的,那为什么不能是我呢?”——科比·布莱恩特
3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,人世间没有任何理想值得以这样的沉沦作为代价。”——马尔克斯《百年孤独》
4. “如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》
5. “人有逆天之时,天无绝人之路。”——《醒世恒言》
6. “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》
7. “维持现状意味着空耗你的努力和生命。”——纪伯伦

Vue * 事件驱动编程

一. 概述

在前端编程中(这里重点指的是WEB端编程),事件的处理是比较普遍的,如:单击、失焦、监听等,这里我们不一一的展开来说,这些都比较简单。而本次重点对 Vue 编程中的 “emit 和 依赖注入provide/inject” 的使用进行重点说明。思考下:为啥重点说它两个,(不说他两你写什么,说点其他的不行, …小学生 )

在本文开始之前,我们来回顾下在vue 中父子组件交互的方式有哪些? 10种(正统), 11(使用了三方库)?

1、父组件通过子组件的props属性,传值给子组件;

2、子组件通过$emit调用父组件的方法,传值给父组件;思考下emit原理?

3、父组件provide传递孙子组件inject接收;

4、父组件通过$refs获取子组件的数据或者方法; 不安全不建议但是爽,用就对了

5、子组件通过$parent获取父组件数据或者方法; 不安全不建议但是爽,用就对了

6、组件之间通过 a t t r s 和 attrs和 attrslisteners透传,注意($listeners 对象在 Vue 3 中已被移除。事件监听器现在是 $attrs 的一部分)

7、事件总线event-bus

8、vue-router传值

9、vuex传值

10、slot作用域传值;

11、其他的组件库不要说,如:emitter.js,emtt等,说了的感觉知识面不太行

二. Emit

1. 概念

emit/emit是一个强大的工具,它使得事件能够在Vue组件层次结构中传播。在Vue.js中,$emit是一个实例方法,用于触发当前实例上的事件。这些事件可以被父级组件监听并作出响应。

重点:父子组件之间通信,非父子不可?(思考下)

2. 看个代码

  • ParentComponent .vue
<!-- 父组件 -->
<script setup>
import ChildComponent from './ChildComponent.vue';const handleUpdate = (data) => {console.log('更新事件触发:', data);
};
</script><template><ChildComponent @update="handleUpdate" />
</template>
  • ChildComponent .vue
<!-- 子组件 -->
<script setup>
import { defineEmits } from 'vue';// 定义触发的事件及其数据类型
const emit = defineEmits(['update']);// 触发事件
const handleUpdate = () => {emit('update', { id: 1, name: 'Vue 3' });
};
</script><template><button @click="handleUpdate">更新</button>
</template>

3. 原理

当你在子组件中调用 $emit 函数时,Vue 会查找该组件的父组件,并查看父组件是否监听了你触发的事件。如果父组件监听了该事件,那么它就会调用与该事件相关联的回调函数,并将你传递的数据作为参数传递给这个回调函数。这个过程是同步的,意味着一旦你调用了 $emit,父组件中的回调函数就会立即被调用。

三. Provide / Inject

1. 概念

provide 和 inject 是 Vue 3 提供的一种机制,主要用于在 祖先组件 和 后代组件 之间传递数据,尤其适用于跨级传值。重点(跨级组件通信)

2. 原理

来张图:
在这里插入图片描述

图的意思说明:

在创建vue组件实例时,子组件的provides属性对象会直接使用父组件的provides属性对象。如果在子组件中使用了provide函数,那么会以父组件的provides属性对象为原型创建一个新的provides属性对象,并且将provide函数中注入的内容塞到新的provides属性对象中,从而形成了原型链。

在孙子组件中,他的parent就是子组件。会直接使用他的父组件的provides属性对象,所以这里的子组件是直接使用的是父组件中的provides属性对象。所以在孙子组件中可以直接使用inject函数拿到父组件中注入的内容。

3. 使用方式

import { provide } from 'vue';export default {setup() {provide('message', 'Hello from parent');}
}
import { provide } from 'vue';export default {setup() {provide('message', 'Hello from parent');}
}

四. Eitt.js

1. 概念

mitt是一个小巧且快速的TypeScript实现的EventEmitter 3封装库,专门用于Vue 3应用中的组件通信。在Vue 2.x中,通常使用EventBus进行组件间的通信,但在Vue 3.x中,推荐使用mitt作为替代方案。
这个说明下:兄弟组件通信;当然使用provide/inject 包含在一个顶级组件中也可以实现,你要是说:vuex,vue-router pinia也能实现,你简直就是聪明的不行!

2. 使用

npm install 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

简洁的不止一点。

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

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

相关文章

嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目

此项目是基于人脸识别的考勤系统开发&#xff0c;包括如下模块&#xff1a; 1、人脸识别考勤系统GUI界面设计&#xff0c;包括&#xff1a; &#xff08;1&#xff09;Qt环境(window环境/linux环境) &#xff1b; &#xff08;2&#xff09;Qt工程创建分析&#xff1b; &am…

UGUI简单动画制作

一、最终效果 UI简单动画制作 二、制作过程 1、打开动画制作窗口 2、新建一个动画 3、给一个对象制作动画 4、创建动画控制器进行不同动画变换控制 5、书写脚本&#xff0c;通过按钮来进行不同动画切换 using System.Collections; using System.Collections.Generic; using U…

Windows Powershell实战指南(未完成)

目前只作简单了解&#xff0c;开始吧。 一、初识Powershell 目标 初步认识 Powershell和其集成环境 Ise&#xff0c;学会基本设置 实验 我们从简单的例子开始&#xff1a;希望你能从控制台和ISE的配置中实现相同的结果。然后按照下面五步进行。 &#xff08;1&#xff09;选…

PyQt实战——实现可视化音频播放器(十三)

系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序入口QMainWindow&#xff08;三&…

Java日志框架:log4j、log4j2、logback

文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使…

RustDesk内置ID服务器,Key教程

RustDesk内置ID服务器&#xff0c;Key教程 首先需要准备一个域名&#xff0c;并将其指定到你的 rustdesk 服务器 ip 地址上&#xff0c;这里编译采用的是Github Actions &#xff0c;说白了是就workflows&#xff0c;可以创建一些自动化的工作流程&#xff0c;例如代码的检查&a…

OpenHarmony怎么修改DPI密度值?RK3566鸿蒙开发板演示

本文介绍在开源鸿蒙OpenHarmony系统下&#xff0c;修改DPI密度值的方法&#xff0c;触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566四核处理器&#xff0c;Laval鸿蒙社区推荐开发板&#xff0c;已适配全新开源鸿蒙OpenHarmony5.0 Release系统&#xff0c;适…

OCR实践-Table-Transformer

前言 书接上文 OCR实践—PaddleOCR Table-Transformer 与 PubTables-1M table-transformer&#xff0c;来自微软&#xff0c;基于Detr&#xff0c;在PubTables1M 数据集上进行训练&#xff0c;模型是在提出数据集同时的工作&#xff0c; paper PubTables-1M: Towards comp…

常见的邮件协议SMTP和POP3

常见的邮件协议包括SMTP和POP3&#xff0c;SMTP用来发送邮件&#xff0c;POP3用来接收邮件信息。 SMTP SMTP 是一种用于发送电子邮件的协议。它的主要作用是将**电子邮件**从邮件客户端&#xff08;如 Outlook、Thunderbird&#xff09;或邮件服务器发送到接收服务器。 SMTP …

UGUI源码分析 --- UI的更新入口

首先所有的UI组件都是添加到画布&#xff08;Canvas&#xff09;显示的&#xff0c;所以首先要从Canvas入手&#xff0c;通过搜索脚本函数以及使用Profiler查看UI的函数的执行&#xff0c;定位到了willRenderCanvases函数 打开UI的文件夹&#xff0c; 通过搜索willRenderCanvas…

Wend看源码-Java-集合学习(Set)

概述 Wend看源码-Java-集合学习(List)-CSDN博客 在上一篇文章中&#xff0c;我们深入探讨了Java集合框架的父类以及List集合的细节。接下来&#xff0c;本文将重点阐述Java中的Set集合&#xff0c;包括其内部的数据结构以及核心方法的详尽说明。 Set 集合 图1 java-Set类型数据…

双闭环直流调速系统

一 设计要求 1、原始条件 主要参数&#xff1a;直流电机PN 22KW&#xff0c;额定电压UN220V&#xff0c; 额定电流IN106A&#xff0c;nN 1500r/min&#xff0c;电枢绕组电阻Ra 0.11Ω&#xff0c;主电路总电阻R0.32Ω&#xff0c;磁极对数P2&#xff0c; Ks22&#xff0c;GD2…

word无法创建工作文件,检查临时环境变量。

word无法创建工作文件&#xff0c;检查临时环境变量。 word preview版本&#xff0c;关联打开文件出现报错。word无法创建工作文件&#xff0c;检查临时环境变量。 打开注册表&#xff0c;删除键 Word Preview: HKCR\CLSID{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE} PowerPoint …

Excel将混乱的多行做成1列

目标是将数据按从左到右&#xff0c;再从上到下排成一列。 公式法 首先用textjoin函数将文本包起来&#xff0c;做成一个超长文本。 然后用公式 截取文本 Mid(m1,n,3)&#xff0c;意思就是对m1单元格&#xff0c;从第n个字符开始&#xff0c;截取3个字符出来。 这个公式如何自…

深入解析MySQL索引结构:从数组到B+树的演变与优化

前言&#xff1a; 在数据库查询中&#xff0c;索引是一种关键的性能优化工具。然而&#xff0c;索引的失效可能导致查询效率大幅下降。为了更好地理解索引的工作原理及规避其失效&#xff0c;深入了解索引结构的演变过程尤为重要。 MySQL 的索引数据结构从简单到复杂&#xff0…

怎么把多个PDF合并到一起-免费实用PDF编辑处理工具分享

>>更多PDF文件处理应用技巧请前往 96缔盟PDF处理器 主页 查阅&#xff01; 序言 我之前的文章也有介绍过如何使用96缔盟PDF处理器对PDF文件合并或者批量合并的介绍&#xff0c;但是当时是使用DMPDFUtilTool1.0版本进行的&#xff0c;当时的功能尚不完善&#xff0c;还不支…

medical meadow medical flashcards

“medalpaca/medical_meadow_medical_flashcards” 是一个在 Hugging Face 数据集平台上可用的数据集。这个数据集主要面向医学领域&#xff0c;包含了大量的医学知识卡片&#xff0c;这些卡片由医学生创建和更新&#xff0c;旨在帮助学习和记忆重要的医学概念。以下是关于这个…

新品:SA628F39大功率全双工音频传输模块

SA628F39是一款高集成度的8W大功率全双工无线数据语音一体通话模块&#xff0c;专为高效、稳定的远程通信设计。该模块内置高速微控制器、高性能射频芯片、功率放大器、ESD静电保护和硬件看门狗芯片&#xff0c;具备反接保护、过流过压保护和防死机保护等多重安全功能&#xff…

moviepy将图片序列制作成视频并加载字幕 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

面试突击-JAVA集合类(持续更新...)

前言 这篇文档非常适合面试突击人群&#xff0c;java集合类是面试高频问点&#xff0c;阅读完此文章可以直接应对面试官一切问题&#xff0c;最终吊打面试官。 概览 Java 集合&#xff0c;也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&am…