事件处理

on

v-on用于替代JavaScript原本烦杂的事件绑定方式


两种写法

写法说明示例
内联直接在 HTML 标签上写逻辑<button @click="say('hello')">Say hello</button>
箭头函数内联写法中使用箭头函数<button @click="(event) => warn('...')">Submit</button>
函数定义在 <script setup> 中定义事件处理函数在 script 中定义 function say(msg) { ... }
js
import { ref } from 'vue'

const count = ref(0)

function say(msg) {
    console.log(msg)
}

事件修饰符

事件修饰符可以便捷限制事件。

修饰符说明
.stop阻止事件冒泡
.prevent阻止默认行为
.self仅当 event.target 是元素本身时触发
.capture使用捕获模式
.once事件只触发一次
.passive滚动事件立即触发,不等待 onScroll 完成
html
<!-- 单击事件将停止传递 -->
<a @click.stop="doThis"></a>

<!-- 提交事件将不再重新加载页面 -->
<form @submit.prevent="onSubmit"></form>

<!-- 修饰语可以使用链式书写 -->
<a @click.stop.prevent="doThat"></a>

<!-- 仅当 event.target 是元素本身时才会触发事件处理器 -->
<div @click.self="doThat">...</div>

<!-- 添加事件监听器时,使用 `capture` 捕获模式 -->
<div @click.capture="doThis">...</div>

<!-- 点击事件最多被触发一次 -->
<a @click.once="doThis"></a>

<!-- 滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成 -->
<div @scroll.passive="onScroll">...</div>

按键修饰符

用于便捷绑定键盘按键事件。

修饰符说明
.enter回车键
.tabTab 键
.delete捕获 Delete 和 Backspace 两个按键
.escEscape 键
.space空格键
.up上方向键
.down下方向键
.left左方向键
.right右方向键
.ctrlCtrl 键
.altAlt 键
.shiftShift 键
.metaMeta 键

鼠标按键修饰符

用于便捷绑定鼠标按键事件。

修饰符说明
.left鼠标左键
.right鼠标右键
.middle鼠标中键