【Vue】12 Vue技术—— Vue 事件修饰符详解:掌握事件处理的高级技巧

文章目录

    • 前言
    • 示例代码结构概览
    • 1. `.prevent`:阻止默认行为
      • 作用
      • 示例分析
    • 2. `.stop`:阻止事件冒泡
      • 作用
      • 示例分析
    • 3. `.once`:事件只触发一次
      • 作用
      • 示例分析
    • 4. `.capture`:使用事件捕获模式
      • 作用
      • 事件流回顾
      • 示例分析
    • 5. `.self`:仅当事件由自身触发时才响应
      • 作用
      • 示例分析
    • 6. `.passive`:立即执行默认行为,不等待回调
      • 作用
      • 背景
      • 示例分析
    • 完整代码
    • 总结:事件修饰符速查表
    • 结语

前言

在 Vue.js 开发中,事件处理是构建交互式用户界面的核心。除了基础的事件绑定(如@click="handler"),Vue 还提供了一套强大的事件修饰符(Event Modifiers),让我们能以声明式的方式更优雅地控制事件行为,而无需在方法内部编写繁琐的 DOM 操作逻辑(如event.preventDefault()event.stopPropagation())。

本文将结合一个完整的示例,深入讲解 Vue 中六大常用事件修饰符:.prevent.stop.once.capture.self.passive,帮助你全面掌握它们的使用场景与原理。


示例代码结构概览

我们先来看一下示例的整体结构:

<divid="root"><h2>欢迎来到{{name}}学习</h2><!-- 各种事件修饰符的使用示例 --><ahref="http://baidu.com"@click.prevent="showInfo">...</a><div@click="showInfo"><button@click.stop="showInfo">...</button></div><button@click.once="showInfo">...</button><div@click.capture="showMsg(1)">...</div><div@click.self="showInfo"><button>...</button></div><ul@scroll="demo"class="list">...</ul><ul@wheel.passive="demo1"class="list">...</ul></div>

对应的 Vue 实例定义了showInfoshowMsg等方法用于演示效果。


1..prevent:阻止默认行为

作用

阻止元素的默认行为。常用于<a>标签、表单提交等场景。

示例分析

<ahref="http://baidu.com"@click.prevent="showInfo">点我提示信息</a>
  • 正常情况下,点击链接会跳转到百度。
  • 加上.prevent后,event.preventDefault()被自动调用,阻止跳转,只执行showInfo方法弹出提示。

等价于:在方法中手动写e.preventDefault()


2..stop:阻止事件冒泡

作用

阻止事件向父级元素冒泡(Bubble)

示例分析

<divclass="demo1"@click="showInfo"><button@click.stop="showInfo">点我提示信息</button></div>
  • 点击按钮时:
    • 按钮自身的@click.stop触发showInfo
    • 但由于.stop的存在,事件不会冒泡到外层 div,所以 div 的点击事件不会触发
  • 若去掉.stop,点击按钮会连续弹出两次提示(一次来自 button,一次来自 div)。

📌应用场景:避免嵌套可点击区域时的重复触发。


3..once:事件只触发一次

作用

让事件处理器仅执行一次,之后自动移除监听器。

示例分析

<button@click.once="showInfo">点我提示信息</button>
  • 第一次点击:弹出“同学你好!”
  • 第二次及以后点击:无反应,因为监听器已被移除。

⚠️ 注意:.once是 Vue 的特殊修饰符,不是原生 DOM API,但效果类似addEventListener(..., { once: true })


4..capture:使用事件捕获模式

作用

捕获阶段(而非默认的冒泡阶段)触发事件处理器。

事件流回顾

DOM 事件流分为三个阶段:

  1. 捕获阶段(从 window 到目标元素)
  2. 目标阶段
  3. 冒泡阶段(从目标元素回传到 window)

默认 Vue 事件监听处于冒泡阶段.capture强制改为捕获阶段

示例分析

<divclass="box1"@click.capture="showMsg(1)">div1<divclass="box2"@click="showMsg(2)">div2</div></div>
  • 点击 inner div(div2)时:
    • 先触发外层 div1 的@click.capture→ 弹出 “同学你好!1”
    • 再触发内层 div2 的@click→ 弹出 “同学你好!2”

🔁 若都用默认冒泡,则顺序相反:先 2,后 1。


5..self:仅当事件由自身触发时才响应

作用

只有当event.target等于当前绑定元素本身时,才触发回调。

示例分析

<divclass="demo1"@click.self="showInfo"><button@click="showInfo">点我提示信息</button></div>
  • 点击button
    • button 的点击事件触发(弹窗);
    • 但 div 的@click.self不触发,因为event.target是 button,不是 div。
  • 点击div 的空白区域(非 button):
    • div 的@click.self会触发,因为此时event.target === div

🎯 与.stop区别:.self不阻止冒泡,只是过滤触发条件


6..passive:立即执行默认行为,不等待回调

作用

告诉浏览器:不要等待事件处理函数执行完,立即执行默认行为(如滚动、缩放)。

背景

某些事件(如touchmovewheel)如果处理函数耗时较长,会导致页面卡顿。使用.passive可提升滚动流畅度。

示例分析

<ul@wheel.passive="demo1"class="list">...</ul>
  • demo1方法包含一个耗时循环(打印 10000 次):
    demo1(){for(leti=0;i<10000;i++)console.log('#')console.log('累坏了')}
  • 由于.passive滚轮操作会立即生效(列表可流畅滚动),而不会被 JS 阻塞。
  • 若去掉.passive,滚动会明显卡顿,直到demo1执行完毕。

⚠️ 限制:不能与.prevent同时使用,因为 passive 模式下无法取消默认行为。


完整代码

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>事件修饰符</title> <!-- 引入Vue --> <script type="text/javascript" src="../js/vue.js"></script> <style> *{margin-top:20px;}.demo1{height:50px;background-color:skyblue;}.box1{padding:5px;background-color:skyblue;}.box2{padding:5px;background-color:orange;}.list{width:200px;height:200px;background-color:peru;overflow:auto;}li{height:100px;}</style> </head> <body> <!-- Vue中的事件修饰符: 1.prevent:阻止默认事件(常用); 2.stop:阻止事件冒泡(常用); 3.once:事件只触发一次(常用); 4.capture:使用事件的捕获模式; 5.self:只有event.target是当前操作的元素时才触发事件; 6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕; --> <!-- 准备好一个容器 --> <div id="root"> <h2>欢迎来到{{name}}学习</h2> <!-- 阻止默认事件(常用) --> <a href="http://baidu.com"@click.prevent="showInfo">点我提示信息</a> <!-- 阻止事件冒泡 --> <div class="demo1"@click="showInfo"> <button @click.stop="showInfo">点我提示信息</button> </div> <!-- 事件只触发一次 --> <button @click.once="showInfo">点我提示信息</button> <!-- 使用事件的捕获模式 --> <div class="box1"@click.capture="showMsg(1)"> div1 <div class="box2"@click="showMsg(2)"> div2 </div> </div> <!-- 只有event.target是当前操作的元素时才触发事件 --> <div class="demo1"@click.self="showInfo"> <button @click="showInfo">点我提示信息</button> </div> <!-- 事件的默认行为立即执行,无需等待事件回调执行完毕 --> <ul @scroll="demo"class="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <ul @wheel.passive="demo1"class="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </div> <script type="text/javascript"> Vue.config.productionTip = false // 阻止Vue在启动时产生生产提示 const vm = newVue({el:'#root', data:{name:'上高山'}, methods:{showInfo(e){// e.preventDefault()// 阻止事件的默认行为,也可以通过@click.prevent来阻止,prevent就是一个事件修饰符alert('同学你好!')},showMsg(msg){alert('同学你好!'+ msg)}, demo(){console.log('@')}, demo1(){for(let i = 0;i < 10000;i++){console.log('#')}console.log('累坏了')}}})</script> </body> </html>

总结:事件修饰符速查表

修饰符作用常见场景
.prevent阻止默认行为阻止链接跳转、表单提交
.stop阻止事件冒泡嵌套点击区域防重复触发
.once事件只触发一次初始化操作、一次性确认
.capture使用捕获阶段需要先处理外层逻辑
.self仅自身触发才响应精确控制事件源
.passive默认行为立即执行优化滚动、触摸性能

💡组合使用:Vue 允许多个修饰符连用,如@click.stop.prevent


结语

Vue 的事件修饰符极大简化了 DOM 事件的控制逻辑,使代码更清晰、性能更优。掌握这些修饰符,不仅能写出更健壮的交互逻辑,还能避免常见的事件陷阱(如冒泡干扰、滚动卡顿等)。建议在实际项目中根据需求灵活选用,提升用户体验与开发效率。

🌟最佳实践:优先使用修饰符,而非在方法中手动调用event.stopPropagation()preventDefault()—— 这正是 Vue 声明式编程的魅力所在。

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

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

相关文章

‌Jira自动化创建性能缺陷工作流‌‌.面向测试团队的高效缺陷管理方案

‌ ‌一、核心流程设计‌ ‌专用性能缺陷项目创建‌ 在Jira中建立独立的性能缺陷跟踪项目&#xff0c;与功能缺陷分离选择Bug Tracking模板&#xff0c;启用性能专项问题类型&#xff08;需自定义配置&#xff09; ‌关键字段自动化填充‌ - 性能指标字段&#xff1a;响应时…

测试报告自动邮件推送系统:解放双手,提升交付效率‌——自动化报告分发如何重构测试团队的工作流

一、核心痛点与解决方案 传统人工汇总测试报告存在三大瓶颈&#xff1a; ‌时效滞后‌&#xff1a;测试完成至报告送达平均延迟4-8小时‌信息割裂‌&#xff1a;多环境报告&#xff08;Dev/Test/Prod&#xff09;分散在不同平台‌定制困难‌&#xff1a;每次需手动调整邮件内…

基于Java的家纺库存智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 家纺库存智慧管理系统的主要功能模块涵盖了从会员管理、供应商客户及产品信息到仓库和订单处理的所有环节&#xff0c;旨在全面提升家纺行业的库存管理水平。相较于传统系统&#xff0c;该设计引入了更细致的数据分类与管理方式&#xff…

乐奇Rokid生态大会暨全球开发大赛决赛在武汉落幕

近日&#xff0c;AI眼镜领先品牌乐奇Rokid主办的ARAI科技盛会"Rokid生态大会暨Spatial Joy 2025全球AR&AI开发大赛决赛"在武汉江夏盛大举行。据「TMT星球」了解&#xff0c;本次大会汇聚了九大顶级科技公司、百余项前沿科技应用&#xff0c;现场超过1000人参会互…

基于Java的宽带客户收费智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 宽带客户收费智慧管理系统旨在优化传统手工操作流程&#xff0c;通过引入现代信息技术手段实现高效、准确的管理。系统主要功能模块包括会员管理、小区管理、套餐管理等&#xff0c;涵盖数据录入、查阅执行以及信息变更等多项任务。与传统…

基于Java的宽带客户收费维修管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 宽带客户收费维修管理系统主要功能模块涵盖了员工管理、会员管理、材料管理、收费记录管理、工单管理和工单材料使用记录管理。此系统采用SpringMVC开发框架&#xff0c;数据库选用MySQL&#xff0c;旨在提升宽带客户的收费与维修效率。相…

2026必备!10个AI论文写作软件,专科生毕业论文轻松搞定!

2026必备&#xff01;10个AI论文写作软件&#xff0c;专科生毕业论文轻松搞定&#xff01; 论文写作的春天&#xff0c;AI 工具正在改变你的学习方式 随着人工智能技术的不断发展&#xff0c;AI 工具在学术领域的应用越来越广泛。对于专科生而言&#xff0c;论文写作不仅是一项…

基于Java的宽带客户智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 宽带客户智慧管理系统基于Java开发&#xff0c;采用SpringMVC框架和MySQL数据库。该系统涵盖了会员操作管理、公司管理、小区管理等18个主要功能模块&#xff0c;并详细定义了各模块的字段属性。为普通员工与部门领导提供了数据录入、查阅…

降维算法的组件化设计:从理论到高性能实践

好的&#xff0c;遵照您的要求&#xff0c;我将以随机种子 1768870800066 为起点&#xff0c;深入探讨“降维算法组件”这一主题。本文将超越常见的鸢尾花数据集和PCA入门介绍&#xff0c;聚焦于算法组件化思想、流形学习的工程实践&#xff0c;以及在大规模、多模态数据场景下…

混沌工程与性能测试联动机器人:重塑系统稳定性防线‌‌——面向软件测试从业者的下一代验证框架

一、破壁&#xff1a;当混沌实验遇见性能压测‌ 在分布式架构成为主流的当下&#xff0c;某头部电商的黑色星期五故障案例极具警示性&#xff1a; ‌场景复现‌&#xff1a; 系统通过万级并发性能测试后上线&#xff0c;却在流量高峰遭遇区域性机房故障。传统性能测试未能覆盖…

基于Java的宾客智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?毕设无需从零敲&#xff01;本系统基于Java的宾客智慧管理系统&#xff0c;涵盖了会员管理、客房服务、订单处理等24个功能模块。这些模块不仅完善了传统选题的功能覆盖&#xff0c;还创新性地引入了多种互动机制和分析工具&#xff0c;使其…

基于Java的宾馆房间智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?宾馆房间智慧管理系统以SpringMVC开发框架和MySQL数据库为核心&#xff0c;涵盖了从客户管理到设施设备维护的全方位功能模块。该系统不仅能够提升酒店运营效率与服务质量&#xff0c;还为普通员工提供了便捷的数据录入、查阅及执行工具&am…

基于Java的宾馆服务智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?宾馆服务智慧管理系统的设计与实现&#xff0c;基于Java语言和SpringMVC框架开发&#xff0c;并使用MySQL数据库管理。系统包含会员、顾客、预订等多模块功能&#xff0c;满足日常运营需求的同时提供了高效的数据处理能力。相较于传统选题&…

基于Java的宿舍电力智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 宿舍电力智慧管理系统主要功能模块涵盖会员、宿舍楼、房间等全方位管理&#xff0c;致力于提高宿舍用电效率与安全性。该系统采用SpringMVC框架结合MySQL数据库实现高效数据处理&#xff0c;并提供直观的数据可视化展示。对比传统选题&am…

LLVM - 编译器优化(一)

一:概述 使用我们之前所展示的基本代码生成方法,你可以构建一个能够生成完全可用、能正确运行代码的编译器。然而,如果你仔细检查编译器输出的代码,就会发现其中存在许多明显的低效之处。这是因为基本的代码生成策略是孤立地看待每一个程序元素的,为了把它们连接在…

基于Java的对外传媒关系智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 毕设不必从零敲&#xff01;本系统基于Java的对外传媒关系智慧管理系统&#xff0c;涵盖了媒体库管理、发布需求处理、资源预订等多个模块。与传统选题相比&#xff0c;此项目具有更高的创新性和实用性&#xff0c;在功能上更贴近市场需求…

2026年国内咨询公司推荐:聚焦技术GEO优化评测解决品牌认知与增长核心痛点 - 十大品牌推荐

摘要 当前,企业品牌建设与战略咨询正面临范式转移。传统的定位与传播模型,在生成式AI重塑信息交互规则的背景下,其效能边界日益凸显。决策者普遍面临的核心焦虑在于:如何确保品牌在智能对话这一新兴决策起点被准确…

2026年国内网络推广公司推荐:聚焦高端制造与专业服务场景评价,直击精准流量与转化痛点 - 十大品牌推荐

摘要 当前,企业网络推广正经历从传统搜索引擎优化向生成式AI生态优化的范式跃迁。面对信息分发的智能化变革,企业决策者普遍面临核心焦虑:如何在AI主导的对话与推荐场景中,确保自身品牌与技术方案被准确理解、权威…

如何选择网络推广服务商?2026年国内网络推广公司评测与推荐,解决策略同质与增长乏力痛点 - 十大品牌推荐

摘要 当前,企业网络推广正经历从传统搜索引擎优化(SEO)与竞价广告(SEM)向生成式AI生态深度渗透的战略转型。面对信息过载与算法快速迭代的市场环境,决策者普遍面临核心焦虑:如何在AI主导的新型对话场景中,确保…

2026年国内推广运营公司推荐:基于多场景实测评价,解决效率与成本核心痛点 - 十大品牌推荐

摘要 在生成式AI技术浪潮重塑全球营销格局的当下,企业决策者正面临前所未有的战略焦虑。传统的流量采买与关键词竞价模式效能日渐式微,而基于大语言模型的智能对话已成为用户获取信息与做出消费决策的新入口。如何在…