概述
Vue.js 提供了 v-on
指令(简写为 @
)用于监听 DOM 事件并执行对应的 JavaScript 代码。这是 Vue 实现用户交互的核心功能之一。
基本用法
事件处理器类型
Vue 支持两种类型的事件处理器:
内联事件处理器:直接在模板中编写简单的 JavaScript 代码
方法事件处理器:调用组件中定义的方法
<!-- 内联事件处理器 -->
<button @click="count++">Add 1</button>
<!-- 方法事件处理器 -->
<button @click="greet">Greet</button>
内联处理器 vs 方法处理器判断机制
Vue 模板编译器通过检查 v-on
的值来判断处理器类型:
值类型 | 示例 | 处理器类型 |
---|---|---|
JavaScript 标识符 | foo |
方法事件处理器 |
属性访问路径 | foo.bar , foo['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 为常见按键提供了别名:
修饰符 | 对应按键 |
---|---|
.enter |
Enter 键 |
.tab |
Tab 键 |
.delete |
Delete 或 Backspace 键 |
.esc |
Escape 键 |
.space |
空格键 |
.up |
上箭头键 |
.down |
下箭头键 |
.left |
左箭头键 |
.right |
右箭头键 |
系统按键修饰符
修饰符 | 功能描述 |
---|---|
.ctrl |
Ctrl 键 |
.alt |
Alt 键 |
.shift |
Shift 键 |
.meta |
Meta 键(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 的事件处理系统提供了强大而灵活的功能:
简洁语法:
v-on
指令和@
简写使代码更清晰两种处理器:内联处理器适合简单逻辑,方法处理器适合复杂逻辑
丰富修饰符:事件修饰符、按键修饰符和系统修饰符简化了常见需求
类型安全:Vue 3 支持为事件处理器标注类型
性能优化:
.passive
修饰符可改善移动端性能
通过合理使用这些功能,可以创建出交互丰富、代码清晰且易于维护的 Vue 应用程序。
附录:修饰符快速参考表
类别 | 修饰符 | 描述 |
---|---|---|
事件修饰符 | .stop |
停止事件传播 |
.prevent |
阻止默认行为 | |
.self |
仅元素自身触发 | |
.capture |
使用捕获模式 | |
.once |
只触发一次 | |
.passive |
改善滚动性能 | |
按键修饰符 | .enter |
Enter 键 |
.tab |
Tab 键 | |
.delete |
Delete/Backspace 键 | |
方向键 | .up , .down , .left , .right |
|
系统修饰符 | .ctrl |
Ctrl 键 |
.alt |
Alt 键 | |
.shift |
Shift 键 | |
.meta |
Meta/Command/Windows 键 | |
特殊修饰符 | .exact |
精确控制修饰键组合 |
鼠标修饰符 | .left |
鼠标左键 |
.right |
鼠标右键 | |
.middle |
鼠标中键 |