在 Vue 组件中,事件对象 event 的获取方式有哪些?请分别说明在模板中以及方法中的具体用法,并指出在使用箭头函数时需要注意什么。
考察说明
考查对 Vue 事件处理中 event 对象获取与传递机制的理解
回答思路
- 【回答框架 1】在 Vue 中访问原生 event 对象有三种常见方式:不带参数直接使用,此时事件处理函数会自动接收到 event 作为第一个参数;在模板中通过 $event 显式传递;或在方法中声明接收参数。
- 【回答框架 2】当模板中写 @click="handleClick" 时,Vue 会将原生事件对象作为第一个参数传给 handleClick,方法中可用 handleClick(e) 接收。若需要同时传递自定义参数和 event,则需在模板中使用 $event,如 @click="handleClick('msg', $event)"。
- 【回答框架 3】使用箭头函数在模板中定义事件处理时,需要显式传入 $event,因为箭头函数不绑定 arguments 对象,直接写 () => handle() 将拿不到事件对象;正确写法为 @click="(e) => handle(e)"。
- 【回答框架 4】在方法中使用箭头函数时,普通函数声明与箭头函数在接收参数上没有区别,因为都是通过参数列表传递,关键是模板中的调用方式决定了如何传值。
- 【回答框架 5】事件对象在不同事件类型中类型不同,如鼠标事件是 MouseEvent,键盘事件是 KeyboardEvent,可通过 e.target、e.preventDefault、e.stopPropagation 等方法操作。
- 【关键点 1】模板中不带参数调用,方法第一个参数自动获取 event
- 【关键点 2】模板中使用 $event 显式传递事件对象,可同时传自定义参数
- 【关键点 3】模板内箭头函数必须显式传入 event,否则拿不到
- 【关键点 4】事件对象类型随事件类型变化,常用属性与操作如 target、preventDefault、stopPropagation
- 【易错点 1】在模板中直接使用箭头函数且未传参数时,事件处理函数无法获取 event
- 【易错点 2】滥用箭头函数可能导致 this 指向变化需注意(但作为方法传参场景下主要关注显式传 event)
- 【易错点 3】混淆自定义参数与事件对象参数顺序,导致取值错误