9种 Vuejs 常用事件修饰符与使用指南
前言
事件修饰符是 Vue.js 中一种特殊的语法标记,通过在事件名称后加上 . 和修饰符名称,可以轻松地修改事件的默认行为。这些修饰符不仅能够提升代码的清晰度,还能够避免一些常见的编程陷阱。Vue.js 提供了一系列事件修饰符,帮助开发者更精细地控制事件的行为,从而简化代码逻辑,提高代码的可维护性。
什么是事件修饰符?
在 Vue.js 中,事件修饰符是一种特殊的标记,用于修改事件的行为。它们可以帮助我们简化代码,并且避免一些常见的陷阱。修饰符是通过在事件名称后加上 . 和修饰符名称的方式来定义的。
常见的事件修饰符
1. .stop
event.stopPropagation() 方法用于阻止事件冒泡到父元素。使用 .stop 修饰符可以轻松实现这一点。
<!-- 阻止点击事件向上冒泡 -->
<button @click.stop="doSomething">Click me</button>
2. .prevent
event.preventDefault() 方法用于阻止默认事件的发生。使用 .prevent 修饰符可以简化这一操作。
<!-- 阻止表单提交 -->
<form @submit.prevent="onSubmit">提交</form>
3. .capture
默认情况下,事件是以冒泡方式触发的。.capture 修饰符可以使事件以捕获方式触发。
<!-- 使用捕获模式 -->
<div @click.capture="onCapture">捕获模式</div>
4. .self
.self 修饰符用于只在事件目标是当前元素自身时触发处理函数,而不是事件冒泡的情况。
<!-- 仅在点击本元素时触发 -->
<div @click.self="onClick">点击我</div>
5. .once
.once 修饰符用于事件只触发一次,之后自动移除监听器。
<!-- 事件只触发一次 -->
<button @click.once="doSomethingOnce">点击一次</button>
6. .left, .right, .middle
这些修饰符用于指定鼠标按钮,分别对应鼠标左键、右键和中键点击事件。
<!-- 仅在左键点击时触发 -->
<button @click.left="onLeftClick">左键点击</button><!-- 仅在右键点击时触发 -->
<button @click.right="onRightClick">右键点击</button><!-- 仅在中键点击时触发 -->
<button @click.middle="onMiddleClick">中键点击</button>
7. .passive
.passive 修饰符用于提升滚动性能。它告诉浏览器你不会调用 event.preventDefault(),从而让浏览器可以更加高效地处理滚动事件。
<!-- 提升滚动性能 -->
<div @scroll.passive="onScroll">滚动事件</div>
8. .exact
.exact 修饰符用于精确控制事件触发条件。它确保事件只在没有其他修饰键(如 Ctrl、Alt、Shift 等)按下的情况下触发。
<!-- 仅在没有修饰键按下时触发 -->
<button @click.exact="onExactClick">精确点击</button>
你可以结合其他修饰符使用 .exact 来实现更复杂的条件判断:
<!-- 仅在按下 Ctrl 键且没有其他修饰键时触发 -->
<button @click.ctrl.exact="onExactCtrlClick">精确 Ctrl 点击</button>
9. .ctrl, .alt, .shift, .meta
分别对应按下 Ctrl、Alt、Shift 和 Meta(Command 键)的情况。可以结合其他修饰符使用。
<button @click.ctrl="onCtrlClick">Ctrl 点击</button>
<button @click.alt="onAltClick">Alt 点击</button>
<button @click.shift="onShiftClick">Shift 点击</button>
<button @click.meta="onMetaClick">Meta 点击</button>
组合使用事件修饰符
在实际开发中,你可以组合使用多个事件修饰符来实现复杂的交互逻辑。例如,你可以结合 .prevent 和 .stop 修饰符来阻止表单提交并阻止事件冒泡:
<!-- 阻止表单提交并阻止事件冒泡 -->
<form @submit.prevent.stop="onSubmit">提交</form>
实际应用
1. 拖拽排序
在实现拖拽排序功能时,使用 .stop 和 .self 修饰符可以有效避免事件冒泡导致的意外行为:
<!-- 在拖拽元素上应用修饰符 -->
<div v-for="item in items" :key="item.id" @mousedown.stop.self="onDragStart(item)">{{ item.name }}
</div>
2. 弹窗控制
在实现弹窗组件时,使用 .prevent 和 .once 修饰符可以简化控制逻辑:
<!-- 阻止默认点击行为,并确保点击事件只触发一次 -->
<button @click.prevent.once="openModal">打开弹窗</button><div v-if="isModalOpen" @click.self="closeModal"><!-- 弹窗内容 -->
</div>
3. 高性能滚动事件
在处理大量滚动事件时,使用 .passive 修饰符可以提升性能:
<!-- 提升滚动性能 -->
<div @scroll.passive="onScroll"><!-- 内容 -->
</div>
总结
Vue.js 的事件修饰符为我们提供了强大且灵活的事件处理能力。通过合理使用这些修饰符,我们可以编写出更加简洁、高效和易于维护的代码。在实际开发中,理解和应用这些修饰符,将让 Vue 开发更加顺畅。
相关文章:
9种 Vuejs 常用事件修饰符与使用指南
前言 事件修饰符是 Vue.js 中一种特殊的语法标记,通过在事件名称后加上 . 和修饰符名称,可以轻松地修改事件的默认行为。这些修饰符不仅能够提升代码的清晰度,还能够避免一些常见的编程陷阱。Vue.js 提供了一系列事件修饰符,帮助…...
第十四题刮开有奖
这道题还是将我们下载好的附件先查壳 发现无壳且为32位 所以我们用32位的IDA打开 打开后ShftF12发现一串可疑的字符串 我们跟进看看 发现了这个函数 看这里有string数组 首先给了一串七v7 v8v9的数据 下面还有一个函数 我们再跟进一下 发现这大概是前面v7那堆数据的加密方式 我…...
vue3+vite使用dataV后项目运行报错、页面空白问题
Vue 大屏数据展示组件库官网:http://datav.jiaminghi.com/guide/ 我的版本是:“jiaminghi/data-view”: “^2.10.0” 一、dataV引入,看官网也可 // 安装 ( 我的安装版本 "jiaminghi/data-view": "^2.10.0" …...
PDF 【人工智能白皮书 】【大模型安全实践白皮书】【大模型白皮书】【大模型/深度学习/人工智能原理/心智学习】
【2024 中国人工智能发展白皮书 】【2023 中国人工智能白皮书】【大模型/深度学习/人工智能原理/心智学习】 前言下面所有涉及到的白皮书文件的总下载链接(网盘): 2024 人工智能发展白皮书 深圳市易行网数字科技有限公司2024 大模型训练数据白…...
【vue】13.深入理解递归组件
在Vue.js的开发实践中,组件是构建界面的核心概念。而递归组件则是一种特殊的组件,它能够自己调用自己,从而创造出无限嵌套的界面结构。本文将带你了解递归组件的应用,以及如何在Vue中实现和使用它。 一.什么是递归组件?…...
【OFDM】OFDM Radar Algorithms in Mobile Communication Networks
[1] Maximum Likelihood Speed and Distance Estimation for OFDM Radar 1-CRB估计 1-初步形式 首先单频信号频率估计的CRB,也就是原文Eq.(3.53) v a r [ ω ^ ] ≥ 6 σ N 2 ( N 2 − 1 ) N \mathrm{var}[\hat{\omega}]\geq\frac{6\sigma_N^2}{(N^2-1)N} var[ω^]≥(N2−…...
如何检测java中的内存泄露及溢出,并预防?
引言 在Java开发中,内存管理是一个至关重要的方面。尽管Java有垃圾回收机制,但开发者仍然需要关注内存泄漏和溢出的问题。 内存泄漏会导致应用程序的性能下降,甚至崩溃,而内存溢出则会导致Java虚拟机(JVM)抛出OutOfMemoryError异常。 本文将探讨如何检测Java项目中的内…...
kafka 如何减少数据丢失?
大家好,我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题?希望对大家有帮助; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列,广泛用…...
CTF-PWN: 虚表(vtable)
vtable vtable(虚表,virtual table)是面向对象编程中的一个关键概念,主要用于实现多态性(polymorphism)。它是一种数据结构,通常是一个指针数组,包含了类的虚函数(virtu…...
Redis 集群 总结
前言 相关系列 《Redis & 目录》(持续更新)《Redis & 集群 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 集群 & 总结》(学习总结/最新最准/持续更新)《Redis & 集群…...
2024校园交友系统构建指南/保姆版教程与技巧uniapp+php支持二开
一、建构技巧 1.前后端分离:采用前后端分离的开发模式,有助于提升开发效率,降低维护成本。前端专注于用户界面和交互体验,后端专注于业务逻辑和数据处理。 2.数据安全与隐私保护:实现细粒度的用户权限控制,确保用户数…...
NVR设备ONVIF接入平台EasyCVR视频分析设备平台视频质量诊断技术与能力
视频诊断技术是一种智能化的视频故障分析与预警系统,NVR设备ONVIF接入平台EasyCVR通过对前端设备传回的码流进行解码以及图像质量评估,对视频图像中存在的质量问题进行智能分析、判断和预警。这项技术在安防监控领域尤为重要,因为它能够确保监…...
系统思考—啤酒游戏经营决策沙盘
《第五项修炼:学习型组织建立》——系统思考的深层实践 越来越多的客户发现,系统思考不仅仅是一门课程,而是一种长期的实践。感谢合作伙伴对《第五项修炼》的支持,将其作为一个整体项目推荐。广东嘉荣超市在8月结束两天系统思考的…...
组件封装思路
组件封装的核心思路是:把可复用的结构只写一次,把可能发生变化的部分抽象成组件参数(props/插槽)。 如果是像纯文本,像是一些主标题和副标题,可以抽象成prop传入 如果主体内容是复杂的模版,有图片有列表等,…...
akshare股票涨跌停获取统计分析
参看: https://akshare.akfamily.xyz/data/stock/stock.html#id375 数据源来自东方财富网:https://quote.eastmoney.com/ztb/detail#typeztgc 参数说明 涨停统计: n/m代表m天中有n次涨停板 安装: pip install akshare -i http…...
前端对一个增删改查的思考
1、来源:dify dify/web/app/components/workflow/nodes/question-classifier/components/class-list.tsx at main langgenius/dify GitHub 2、代码流程: 3、思索问题: 1、为啥要用return形式,而不是value直接当函数࿱…...
【Clickhouse】客户端连接工具配置
ClickHouse 是什么 ClickHouse 是一个分布式实时分析型列式存储数据库。具备高性能,支撑PB级数据,提供实时分析,稳定可扩展等特性。适用于数据仓库、BI报表、监控系统、互联网用户行为分析、广告投放业务以及工业、物联网等分析和时序应用场…...
【测试平台】打包 jenkins配置和jenkinsfile文件
背景: 当打包机环境配置完成后,需要挂到master的jenkins中,完成调度。 jenkins启动 命令行直接启动即可。 nohup java -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpListenAddress0.0.0.0 --httpPort80 appending output to n…...
Leetcode224 -- 基本计算器及其拓展
题目分析: 其实这个计算器的实现并不难,因为除了括号就剩下加减法嘛,括号肯定比加减法先执行,但是加减法是同级的,只是会改变数字的正负号而已,所以实现的逻辑并不是很难,我们只需要一个栈&…...
python的lambda实用技巧
lambda表达式 lambda表达式是一种简化的函数表现形式,也叫匿名函数,可以存在函数名也可以不存在。 使用一行代码就可以表示一个函数: # 格式 lambda arg[参数] : exp[表现形式] # 无参写法 lambda : "hello" # 一般写法 lambda …...
博彩业税收支持STEM教育的风险与可持续筹资方案探讨
1. 项目概述:当教育经费与博彩业挂钩作为一名长期关注科技教育领域发展的从业者,我时常需要追踪全球范围内STEM(科学、技术、工程和数学)教育的政策与资金动向。最近在梳理历史资料时,一篇2012年的旧文再次引起了我的注…...
解锁HexView自动化:Bat脚本驱动S19/HEX文件处理实战
1. 为什么需要自动化处理S19/HEX文件 在汽车电子开发领域,我们经常需要处理各种固件文件,比如S19、HEX等格式。这些文件包含了嵌入式系统的机器代码,是软件最终要烧录到芯片中的形态。每次软件更新时,开发人员都要对这些文件进行一…...
2026年搜索引擎大变革:生成式优化解决方案引领新潮流
引言随着ChatGPT、Google AI概览等工具成为主流搜索界面,传统的SEO策略已难以适配新时代的挑战。生成式引擎优化(GEO)应运而生,成为企业在线上生存与优化的新选择。本文将探讨2026年SEO行业格局的变化,分析GEO的核心逻…...
Cursor Pro破解工具完整指南:如何绕过限制实现永久免费使用
Cursor Pro破解工具完整指南:如何绕过限制实现永久免费使用 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached you…...
6.1 图表选择指南
本章学习目标: 理解数据可视化的核心目的:探索 vs 解释掌握不同分析场景对应的图表类型了解每种图表的优势和局限学会根据数据特征和分析目标选择图表核心能力:不只会画图,更知道为什么画这张图一、为什么要做数据可视化ÿ…...
汉高2026年第一季度实现稳健有机销售增长
美通社消息:汉高公布了2026年第一季度的销售额,约为50亿欧元,有机(即根据汇率和收购/撤资进行调整后)销售额实现1.7%的稳健增长。两大业务部门均拉动业绩增长,销量与价格均实现正向增长。第一季度欧洲地区的有机销售下降3.4%。在印…...
原来Ilya还有70亿美元OpenAI股权
鹭羽 发自 凹非寺量子位 | 公众号 QbitAI马斯克 VS 奥特曼的世纪庭审,也太劲爆了——感觉自己像是瓜田里的猹,一瓜未平一瓜又起。吃不过来,根本吃不过来……这不,就在刚刚,OpenAI的造富神话被「一不小心」炸了出来。Op…...
Flutter + 开源鸿蒙跨端实战|基于空间地理信息的**城市全域智慧泊车调度与多维运维管理平台** Day1 项目架构基座与工程化环境搭建
Flutter 开源鸿蒙跨端实战|基于空间地理信息的城市全域智慧泊车调度与多维运维管理平台 Day1 项目架构基座与工程化环境搭建 欢迎入驻开源鸿蒙全栈技术实战社区:https://openharmonycrossplatform.csdn.net <!-- Schema.org 结构化数据 --> <…...
实战复盘:我是如何通过一个SSRF漏洞,利用Gopher协议拿下内网Redis的
从SSRF到内网Redis入侵:一次真实渗透测试的深度剖析 那天下午,我正在对某企业Web应用进行常规安全评估。一个看似普通的文件下载接口引起了我的注意——它接受URL参数并返回对应资源内容。直觉告诉我,这里可能存在SSRF漏洞。接下来的72小时&a…...
基于Tauri与Rust构建跨平台Claude桌面客户端:架构设计与工程实践
1. 项目概述:一个为Claude设计的“圣杯”级桌面应用 如果你和我一样,在日常开发、写作或信息处理中重度依赖Anthropic的Claude模型,那么你肯定也经历过在浏览器标签页间反复横跳、复制粘贴、以及管理冗长对话历史的烦恼。 CoderLuii/HolyCla…...
