做胃镜多少钱天津津门网站I/网络营销品牌公司
Vue 3 中的原生事件监听与组件事件处理完全指南
在 Vue 3 中,事件监听和事件处理是组件交互中的关键部分。Vue 提供了一套简单而强大的事件处理机制,可以方便地监听 DOM 原生事件和组件自定义事件。本篇文章将详细介绍 Vue 3 中事件的使用,包括如何监听原生事件、绑定事件处理函数、使用事件修饰符、在子组件中触发事件,以及 <script setup>
语法糖的应用。
一、原生事件监听
在 Vue 3 中,我们可以使用 v-on
指令来监听原生 DOM 事件。v-on
指令也可以缩写为 @
,使得代码更加简洁。
1. 基本用法
绑定事件时,可以直接将事件名称传入 v-on
指令,并在后面跟随事件处理函数。例如,监听 click
事件:
<template><button @click="handleClick">点击我</button>
</template><script setup>
import { ref } from 'vue';const count = ref(0);function handleClick() {count.value++;console.log("按钮点击次数:", count.value);
}
</script>
解释:
@click="handleClick"
表示绑定click
事件,事件触发时会调用handleClick
函数。- 在
handleClick
函数中,我们通过count.value++
来增加点击计数。
2. 传递事件参数
有时我们需要传递参数给事件处理函数。可以直接在事件处理函数调用时传入参数。
<template><button @click="handleClick('hello')">点击我</button>
</template><script setup>
function handleClick(message) {console.log("传递的参数:", message);
}
</script>
解释:
@click="handleClick('hello')"
表示点击按钮时调用handleClick
,并将'hello'
作为参数传入。
3. 访问事件对象
如果需要访问事件对象,可以通过 $event
关键字获取。
<template><button @click="handleClick($event)">点击获取事件对象</button>
</template><script setup>
function handleClick(event) {console.log("事件对象:", event);
}
</script>
解释:
@click="handleClick($event)"
中的$event
代表原生事件对象。
二、事件修饰符
Vue 提供了多个事件修饰符,使事件处理更加灵活和方便。常用的修饰符包括 .stop
、.prevent
、.capture
、.self
、.once
和 .passive
。
1. .stop
:阻止事件冒泡
使用 .stop
可以阻止事件冒泡到父级元素。
<template><div @click="outerClick"><button @click.stop="innerClick">阻止冒泡</button></div>
</template><script setup>
function outerClick() {console.log("外层元素被点击");
}function innerClick() {console.log("内层按钮被点击");
}
</script>
解释:
- 点击按钮时,
innerClick
会触发,且不会冒泡到外层的div
上。
2. .prevent
:阻止默认行为
使用 .prevent
可以阻止元素的默认行为,例如阻止表单提交或链接跳转。
<template><form @submit.prevent="handleSubmit"><button type="submit">提交</button></form>
</template><script setup>
function handleSubmit() {console.log("表单提交被阻止");
}
</script>
解释:
- 使用
.prevent
修饰符阻止表单的默认提交行为。
3. .once
:事件只触发一次
使用 .once
修饰符,事件只会触发一次,之后自动解绑。
<template><button @click.once="handleClick">点击一次</button>
</template><script setup>
function handleClick() {console.log("按钮只会被点击一次");
}
</script>
解释:
- 第一次点击按钮时,
handleClick
会被调用,之后的点击将不再触发该事件。
4. 其他修饰符
.self
:仅在事件从自身触发时才执行。.capture
:使用事件捕获模式。.passive
:为事件添加passive
修饰符,一般用于滚动事件监听。
三、子组件事件传递
在组件化开发中,我们通常会在子组件中触发事件,然后通过 emit
将事件传递给父组件处理。Vue 3 中的 emit
使用更为简洁,同时可以与 <script setup>
结合,提升开发体验。
1. 子组件触发事件
在子组件中使用 emit
触发自定义事件,首先要引入 defineEmits
。
ChildComponent.vue
<template><button @click="sendEvent">发送事件</button>
</template><script setup>
const emit = defineEmits();function sendEvent() {emit('customEvent', 'Hello from Child');
}
</script>
解释:
emit('customEvent', 'Hello from Child')
会触发名为customEvent
的事件,并传递消息'Hello from Child'
。
2. 父组件监听子组件事件
父组件可以通过 v-on
或 @
监听子组件触发的事件,并接收传递的参数。
ParentComponent.vue
<template><ChildComponent @customEvent="handleCustomEvent" />
</template><script setup>
import ChildComponent from './ChildComponent.vue';function handleCustomEvent(message) {console.log("接收到的消息:", message);
}
</script>
解释:
@customEvent="handleCustomEvent"
监听子组件触发的customEvent
事件,并调用handleCustomEvent
处理该事件。
四、传递事件给子组件
有时我们希望在父组件中监听子组件的原生事件(如 click
),可以使用 .native
修饰符。
不过在 Vue 3 中,官方已经不再推荐使用 .native
。取而代之的是直接在组件中监听事件,这会自动处理绑定到最外层元素的原生事件。
示例:直接监听子组件的原生点击事件
ChildComponent.vue
<template><button>子组件按钮</button>
</template><script setup>
</script>
ParentComponent.vue
<template><!-- 直接监听子组件的 click 事件 --><ChildComponent @click="handleChildClick" />
</template><script setup>
import ChildComponent from './ChildComponent.vue';function handleChildClick() {console.log("子组件按钮被点击");
}
</script>
解释:
- 父组件通过
@click="handleChildClick"
监听子组件的click
事件,无需额外的.native
修饰符。
五、给所有事件动态绑定处理函数
在某些场景中,我们需要给组件的所有事件动态地绑定处理函数。可以通过 v-on="object"
的语法,将一个包含事件处理函数的对象绑定到组件上。
<template><ChildComponent v-on="listeners" />
</template><script setup>
import { reactive } from 'vue';
import ChildComponent from './ChildComponent.vue';const listeners = reactive({click: () => console.log("子组件被点击"),mouseover: () => console.log("鼠标移入子组件")
});
</script>
解释:
v-on="listeners"
会将listeners
对象中的所有事件绑定到ChildComponent
上。
六、总结
本文详细介绍了 Vue 3 中的事件监听与处理,包括原生事件监听、事件修饰符、子组件事件传递与监听,以及动态绑定事件的用法。掌握这些事件处理技巧可以更灵活地实现组件间的交互,提高代码的可读性和复用性。在 Vue 3 中,配合 <script setup>
语法糖,可以让代码更加简洁易读,使开发体验更流畅。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Vue 3 中的原生事件监听与组件事件处理详解
Vue 3 中的原生事件监听与组件事件处理完全指南 在 Vue 3 中,事件监听和事件处理是组件交互中的关键部分。Vue 提供了一套简单而强大的事件处理机制,可以方便地监听 DOM 原生事件和组件自定义事件。本篇文章将详细介绍 Vue 3 中事件的使用,包…...
![](https://i-blog.csdnimg.cn/direct/5d9b18a5b06649579542294ca3cd1c5b.jpeg)
Flink Source 详解
Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction,新版本的Source更具灵活性,原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类,会创建以下两…...
![](https://www.ngui.cc/images/no-images.jpg)
2024年了,TCP分析工具有哪些?
TCP分析工具广泛应用于网络调试、性能分析和协议学习。以下是一些常用的TCP分析工具,它们各有特点,适用于不同的场景: Wireshark - 这是一个非常强大的网络协议分析器,支持图形界面,可以捕获和分析TCP流量,…...
![](https://i-blog.csdnimg.cn/direct/b803b2ea808f4510bf2fe5e43b80d186.png)
SRP 实现 Cook-Torrance BRDF
写的很乱! BRDF(Bidirectional Reflectance Distribution Function)全称双向反射分布函数。辐射量单位非常多,这里为方便直观理解,会用非常不严谨的光照强度来解释说明。 BRDF光照模型,上反射率公式&#…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL慢日志
慢查询日志顾名思义就是查询慢的sql语句可以记录到一个日志文件里,至于有多慢才会被记录,默认是10秒,但也可以通过系统配置来更改,慢日志在做系统优化时是一个非常好用的工具 #是否开启慢日志 show variables like slow_query_log…...
![](https://www.ngui.cc/images/no-images.jpg)
Flutter网络通信-封装Dio
前言 dio 是一个强大的 Dart HTTP 请求库,支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 Dio的pub地址为:dio | Dart package 封装要求 能够使用get、post、put、patch、delete、…...
![](https://www.ngui.cc/images/no-images.jpg)
matlab 读取csv
需要跳过第一行表头等信息 1、读取整个文件 csvread(FILENAME)%文件路径 文件名2、指定起始位置 csvread(FILENAME, R, C)%从文件的第R行和第C列开始读取数据 逗号分开3、指定数据范围 csvread(FILENAME, R, C, [R1 C1 R2 C2])%读取从(R1, C1)到(R2, C2)范围内的数据注意&am…...
![](https://i-blog.csdnimg.cn/direct/8aa156c774954371b9a7b2a94c899f61.png)
网络层9——虚拟专用网VPN和网络地址转换NAT
目录 一、为什么有虚拟专用网? 二、如何理解“虚拟专用网”? 三、IP隧道技术实现虚拟专用网 四、网络地址变换 一、为什么有虚拟专用网? 第一,IPv4只有32位,最多有40亿个全球唯一的IP地址数量不够,无法…...
![](https://img-blog.csdnimg.cn/img_convert/dfd4033dec7ab768ca0e0672bf4151e7.jpeg)
开源科学工程技术软件介绍 – EDA工具KLayout
link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的,用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载: https://www.klayout.de/build.html KLayout图形用户界面&…...
![](https://www.ngui.cc/images/no-images.jpg)
【网络安全】Cookie SameSite属性
未经许可,不得转载。 文章目录 背景CSRF 攻击SameSite 属性StrictLaxNone背景 为了有效防止 CSRF 攻击并保护用户隐私,Chrome 从 51 版本开始引入了 SameSite 属性,专门用于限制第三方 Cookie 的使用,进而减少安全风险。 CSRF 攻击 跨站请求伪造(CSRF)攻击是指恶意网站…...
![](https://img-blog.csdnimg.cn/img_convert/7675b8bdc68d6cee2123fd500afe4ae7.png)
Linux 命令 | 每日一学,文本处理三剑客之awk命令实践
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 描述:前面作者已经介绍了文本处理三剑客中的 grep 与 sed 文本处理工具,今天将介绍其最后一个且非常强大的 awk 文本处理输出工具,它可以非常方便…...
![](https://i-blog.csdnimg.cn/direct/33779bac4f9c48038f93dbce948b505e.png)
RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)
上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 本篇讲解如何在Spring环境下进⾏RabbitMQ的开发.(只演⽰部分常⽤的⼯作模式) 目录 引⼊依赖 一.工作队列模式 二.Publish/Subscribe(发布订阅模式) …...
![](https://www.ngui.cc/images/no-images.jpg)
【web前端笔记】vue3 + vite的前端项目中,使用import.meta.glob()方法实现全局注册组件的通用代码
目录 1.1、如何读取所有文件 1.2、通用代码 1.3、在main.js引入 这篇文章介绍一下,在vue3和vite搭建的项目中,如何将【src/components】目录下所有的【*.vue】文件,当做一个组件全局注册到Vue对象里面。 1.1、如何读取所有文件 在vue3和vite搭建的项目里面,它给我们提…...
![](https://img-blog.csdnimg.cn/img_convert/4cc4978f28fe091176735706dd38d963.png)
保险行业建立知识管理系统:提高效率和安全性的策略
在保险行业,知识管理系统(KMS)的建立对于提高工作效率和保障数据安全性至关重要。保险公司需要在复杂的生态系统中航行,这个生态系统由不断发展的法规、错综复杂的保单和投保人不断变化的需求所定义。以下是一些关键策略ÿ…...
![](https://i-blog.csdnimg.cn/direct/4917e69416ba475e8b78db019809f8a8.jpeg)
小程序如何完成订阅
小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息(用户通过弹窗订阅)开发指南 实践 我们需要先选这一个模板,具体流程参考…...
![](https://i-blog.csdnimg.cn/direct/6e4c07b61e48438d87f52d4a4b4ec89f.png)
JS学习日记(jQuery库)
前言 今天先更新jQuery库的介绍,它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速,小型且功能丰富的JavaScript库,jQuery设计宗旨是“write less,do more”,即倡导写更少的代码,做更多的事…...
![](https://i-blog.csdnimg.cn/direct/8bf26f626b9546439677643f5e16eb26.png)
Uni-APP+Vue3+鸿蒙 开发菜鸟流程
参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17,本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux的基本用法
Linux的基本用法涵盖多个方面,包括用户登录、系统操作、文件和目录管理、系统工具使用等。以下是对Linux基本用法的详细介绍: 一、用户登录与系统操作 用户登录 普通用户登录:选择用户名并输入密码。超级用户(root)登…...
![](https://www.ngui.cc/images/no-images.jpg)
如何找出爬取网站的来源IP呢?
1.背景 最近网站数据库性能很不稳定,查询性能在某段时间很慢,服务器CPU也很高,平常时间很低,感觉被爬虫恶意搞了,因此我分析了一下最近的nginx访问日志 2.方法 找出访问量最大20个ip [root100 nginx]# cat liuhaih…...
![](https://www.ngui.cc/images/no-images.jpg)
Java爬虫(Jsoup)详解
文章目录 Java爬虫(Jsoup)详解一、引言二、Jsoup 快速入门1、Jsoup 简介1.1、添加依赖 2、解析 HTML 文档2.1、解析 HTML 字符串2.2、从 URL 加载 Document2.3、解析 body 片断 三、数据抽取1、使用 DOM 方法遍历文档3.1、获取元素 2、使用选择器语法查找…...
![](https://i-blog.csdnimg.cn/direct/cbcfd03515c1474d8ec82b9b2beadf58.png)
力扣周赛:第424场周赛
👨🎓作者简介:爱好技术和算法的研究生 🌌上期文章:力扣周赛:第422场周赛 📚订阅专栏:力扣周赛 希望文章对你们有所帮助 第一道题模拟题,第二道题经典拆分数组/线段树都…...
![](https://img-blog.csdnimg.cn/7473bb5f9dfb4d6caa5e422999e6e535.png)
预处理(1)(手绘)
大家好,今天给大家分享一下编译器预处理阶段,那么我们来看看。 上面是一些预处理阶段的知识,那么明天给大家讲讲宏吧。 今天分享就到这里,谢谢大家!!...
![](https://www.ngui.cc/images/no-images.jpg)
利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成
在软件测试工程师的日常工作中,需求分析是测试工作中的关键步骤。需求文档决定了测试覆盖的范围和测试策略,而测试用例的编写往往依赖于需求的准确理解。传统手工分析需求耗时长,尤其在面对大量需求和复杂逻辑时容易遗漏细节。本文将以电商网…...
![](https://www.ngui.cc/images/no-images.jpg)
深入探索:Scrapy深度爬取策略与实践
标题:深入探索:Scrapy深度爬取策略与实践 引言 在数据驱动的时代,深度爬取成为了获取丰富信息的重要手段。Scrapy,作为一个强大的Python爬虫框架,提供了多种工具和设置来帮助我们实现深度爬取。本文将详细介绍如何在…...
![](https://i-blog.csdnimg.cn/direct/03c0861881f5449a82e4e1e74c8e1cf7.png)
《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己
资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Spring 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的,共包含十个作业。每个作业都对应一个具体的主题,例如真假难辨的世界…...
![](https://i-blog.csdnimg.cn/direct/18bdef06f52d4cd1880e4e7d53bf7074.png)
如何编译 Cesium 源码
如何编译 Cesium 源码 Cesium 是一个开源的 JavaScript 库,用于构建 3D 地球和地图应用程序。它提供了一套强大的 API 和工具,使开发者能够创建丰富的地理空间应用。本文将指导您如何从 GitHub 下载 Cesium 源码,并在本地进行编译。 TilesB…...
![](https://www.ngui.cc/images/no-images.jpg)
前端开发设计模式——责任链模式
目录 一、定义和特点 1. 定义 2. 特点 二、实现方式 定义抽象处理者(Handler)类 创建具体处理者(ConcreteHandler)类 构建责任链 以下是一个用 JavaScript 实现的示例: 三、应用场景 1. 表单验证 2. 请求处…...
![](https://i-blog.csdnimg.cn/direct/00e43febde1e42838e9c8d647fc2c624.png)
JavaWeb--MySQL
1. MySQL概述 首先来了解一下什么是数据库。 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 像我们日常访问的电商网站京东,企业内部的管理系统OA、ERP、CRM这类的系统,以及大家每天都会刷的头条、抖音…...
![](https://i-blog.csdnimg.cn/direct/c15d6e81c9064b9596e660a00fee45f7.png)
Python | Leetcode Python题解之第564题数组嵌套
题目: 题解: class Solution:def arrayNesting(self, nums: List[int]) -> int:ans, n 0, len(nums)for i in range(n):cnt 0while nums[i] < n:num nums[i]nums[i] ni numcnt 1ans max(ans, cnt)return ans...
![](https://img-blog.csdnimg.cn/img_convert/62b589e3664fba323eaaecec4ce419a8.jpeg)
Spring Boot教程之Spring Boot简介
Spring Boot 简介 接下来一段时间,我会持续发布并完成Spring Boot教程 Spring 被广泛用于创建可扩展的应用程序。对于 Web 应用程序,Spring 提供了 Spring MVC,它是 Spring 的一个广泛使用的模块,用于创建可扩展的 Web 应用程序。…...