当前位置: 首页 > news >正文

Vue:事件处理机制详解

概述

        Vue.js 提供了 v-on 指令(简写为 @)用于监听 DOM 事件并执行对应的 JavaScript 代码。这是 Vue 实现用户交互的核心功能之一。

基本用法

事件处理器类型

Vue 支持两种类型的事件处理器:

  1. 内联事件处理器:直接在模板中编写简单的 JavaScript 代码

  2. 方法事件处理器:调用组件中定义的方法

<!-- 内联事件处理器 -->
<button @click="count++">Add 1</button><!-- 方法事件处理器 -->
<button @click="greet">Greet</button>

内联处理器 vs 方法处理器判断机制

Vue 模板编译器通过检查 v-on 的值来判断处理器类型:

值类型示例处理器类型
JavaScript 标识符foo方法事件处理器
属性访问路径foo.barfoo['bar']方法事件处理器
函数调用foo()内联事件处理器
表达式count++内联事件处理器

事件修饰符

Vue 提供了一系列事件修饰符来处理常见的 DOM 事件操作:

常用事件修饰符

修饰符功能描述示例
.stop阻止事件冒泡@click.stop="doThis"
.prevent阻止默认行为@submit.prevent="onSubmit"
.self仅当事件从元素本身触发时执行@click.self="doThat"
.capture使用事件捕获模式@click.capture="doThis"
.once事件只触发一次@click.once="doThis"
.passive改善移动端滚动性能@scroll.passive="onScroll"

修饰符使用注意事项

  • 修饰符可以链式使用:@click.stop.prevent="doThat"

  • 顺序很重要:@click.prevent.self 与 @click.self.prevent 行为不同

  • .passive 和 .prevent 不能同时使用

按键修饰符

常用按键别名

Vue 为常见按键提供了别名:

修饰符对应按键
.enterEnter 键
.tabTab 键
.deleteDelete 或 Backspace 键
.escEscape 键
.space空格键
.up上箭头键
.down下箭头键
.left左箭头键
.right右箭头键

系统按键修饰符

修饰符功能描述
.ctrlCtrl 键
.altAlt 键
.shiftShift 键
.metaMeta 键(Mac: ⌘, Win: ⊞)

特殊修饰符

  • .exact精确控制系统修饰符组合触发条件

  • 鼠标按键修饰符:.left.right.middle

事件处理流程图

使用技巧与最佳实践

1. 传递参数给方法

function say(message) {alert(message)
}
<button @click="say('hello')">Say hello</button>
<button @click="say('bye')">Say bye</button>

2. 访问原生事件对象

<!-- 使用 $event 变量 -->
<button @click="warn('Form cannot be submitted yet.', $event)">Submit
</button><!-- 使用内联箭头函数 -->
<button @click="(event) => warn('Form cannot be submitted yet.', event)">Submit
</button>

3. 系统修饰键组合使用

<!-- Alt + Enter -->
<input @keyup.alt.enter="clear" /><!-- Ctrl + 点击 -->
<div @click.ctrl="doSomething">Do something</div><!-- 精确控制修饰键 -->
<button @click.ctrl.exact="onCtrlClick">仅Ctrl</button>

总结

Vue.js 的事件处理系统提供了强大而灵活的功能:

  1. 简洁语法v-on 指令和 @ 简写使代码更清晰

  2. 两种处理器:内联处理器适合简单逻辑,方法处理器适合复杂逻辑

  3. 丰富修饰符:事件修饰符、按键修饰符和系统修饰符简化了常见需求

  4. 类型安全:Vue 3 支持为事件处理器标注类型

  5. 性能优化.passive 修饰符可改善移动端性能

通过合理使用这些功能,可以创建出交互丰富、代码清晰且易于维护的 Vue 应用程序。

附录:修饰符快速参考表

类别修饰符描述
事件修饰符.stop停止事件传播
.prevent阻止默认行为
.self仅元素自身触发
.capture使用捕获模式
.once只触发一次
.passive改善滚动性能
按键修饰符.enterEnter 键
.tabTab 键
.deleteDelete/Backspace 键
方向键.up.down.left.right
系统修饰符.ctrlCtrl 键
.altAlt 键
.shiftShift 键
.metaMeta/Command/Windows 键
特殊修饰符.exact精确控制修饰键组合
鼠标修饰符.left鼠标左键
.right鼠标右键
.middle鼠标中键

文章转载自:

http://YUiLaaNu.sjbty.cn
http://ZYzjHEND.sjbty.cn
http://y9EX78LI.sjbty.cn
http://UqfQOiET.sjbty.cn
http://EqK7mopb.sjbty.cn
http://eO1AuwbQ.sjbty.cn
http://zFNDiOtq.sjbty.cn
http://M6OkKDBR.sjbty.cn
http://X2ZHsOrQ.sjbty.cn
http://oHQyOtpv.sjbty.cn
http://YUJ7b9c8.sjbty.cn
http://d9NP61fo.sjbty.cn
http://1KRYvcmo.sjbty.cn
http://XeKLnD2g.sjbty.cn
http://3bI2EKjB.sjbty.cn
http://5VY5339x.sjbty.cn
http://sYWMhznN.sjbty.cn
http://eN2lSnR9.sjbty.cn
http://1l623y8G.sjbty.cn
http://gCwe5GqE.sjbty.cn
http://0OM1RWop.sjbty.cn
http://Agwigynu.sjbty.cn
http://hY41scwJ.sjbty.cn
http://dMMshFFB.sjbty.cn
http://4hkPlCyi.sjbty.cn
http://ZJC2jJyb.sjbty.cn
http://gvOq8MAa.sjbty.cn
http://4kAcGs4u.sjbty.cn
http://E63yP1XN.sjbty.cn
http://bJV5UGHy.sjbty.cn
http://www.dtcms.com/a/376728.html

相关文章:

  • 【笔记】空气弹簧概述、刚度调节原理
  • IgH EtherCAT 主站核心技术解析:从架构到工业部署的底层逻辑
  • tvm/triton/tensorrt比较
  • kernel_liteos_m移植到正点原子阿波罗F429_keil版
  • <数据集>yolo梨幼果识别数据集<目标检测>
  • BUG排查流程
  • 搞坏了docker 双系统下重装ubuntu22.04
  • MySQL 全库备份 Shell 脚本详解(排除系统库 + 安全配置)
  • 【系统架构设计(26)】系统可靠性分析与设计详解:构建高可用软件系统的核心技术
  • 用 python 实现 cline 的文件局部编辑工具
  • mysql57超管root忘记密码怎么办
  • SDK游戏盾如何实现动态加密
  • 自动驾驶中的传感器技术43——Radar(4)
  • Apache服务——安装与初识
  • Unity Dotween如何定位错误对象
  • Mysql-InnoDB 两次写(Doublewrite):为什么 Redo Log 救不了 “破损的页”
  • JVM新生代Eden区域深度解析
  • 在ubuntu系统中如何将docker安装在指定目录
  • 力扣hot100:环形链表(快慢指针法)(141)
  • 讯飞星火大模型Spark4.0Ultra的WebSocket交互实现解析
  • LeetCode 2958.最多K个重复元素的最长子数组
  • 【Oracle经验分享】字符串拼接过长问题的解决方案 —— 巧用 XMLAGG
  • MP381A-AB02 MEMS麦克风可靠性重新定义消费电子音频
  • 面试题:Redis要点总结(单机数据库)
  • 分类别柱状图(Vue3)
  • 视频生成迎来效率革命!字节提出视频生成稀疏注意力机制,计算量降20倍,速度升17.79倍!
  • 快速开发一类似个人网站空间的工具使用什么方式比较好,比如网页或者个Windows程序,并且使用什么技术开发比较好,区别优势局限性,分别说明一下
  • 计算机毕设选题:基于Python+MySQL校园美食推荐系统【源码+文档+调试】
  • vscode启用GEMINI CODE ASSIST插件
  • 仿QQ音乐的音乐播放器自动化测