vue中可通过$event显式传递原生dom事件对象,如@click="handleclick($event)";支持与自定义参数混用、内联语句及修饰符共存,但不可省略$event或仅写@click="handleclick"。

在 Vue.js 中,事件绑定时想获取原生 DOM 事件对象(比如 MouseEvent、KeyboardEvent),不需要额外封装或手动调用 event.target,Vue 默认就支持直接传入 —— 关键是写法要对。
直接在模板中用 $event 传递事件对象
Vue 模板中,$event 是一个特殊变量,代表当前触发的原生事件对象。只要在事件处理器中显式写出来,就能在方法里接收到:
- 模板写法:
@click="handleClick($event)" - 对应方法:
handleClick(e) { console.log(e.target); } - 注意:不能写成
@click="handleClick"(不带括号),否则 Vue 不会自动注入$event;也不建议写成@click="handleClick()"(空括号),那样会丢失事件对象
同时传递自定义参数和事件对象
实际开发中常需要既传数据又传事件,比如点击列表项时既要拿到 item.id,又要阻止默认行为:
- 模板:
@click="handleItemClick(item.id, $event)" - 方法:
handleItemClick(id, e) { e.preventDefault(); console.log(id); } -
$event必须显式写出,不能省略;位置可前可后,但需与方法参数顺序一致
在内联语句中直接使用 $event
如果逻辑简单,也可以不定义方法,直接在模板中写内联语句(适合快速调试或简单操作):
@click="$event.stopPropagation(); isShow = false"@keyup.enter="$event.preventDefault(); submitForm()"- 注意:内联表达式中不要写复杂逻辑,避免模板臃肿;
$event在这里同样可用,且无需额外声明
使用修饰符时仍可访问 $event
Vue 的事件修饰符(如 .stop、.prevent)只是语法糖,不影响 $event 的传递:
-
@click.stop="handleClick($event)"→e.stopPropagation()已由修饰符处理,但你依然能拿到完整事件对象用于其他用途(如读取e.clientX) - 修饰符和
$event可共存,互不干扰
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











