news 2026/4/18 9:41:22

vue3事件处理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue3事件处理详解

一、事件绑定基础(v-on/@

1. 基本语法

<button v-on:click="handleClick">点击</button> <!-- 简写 --> <button @click="handleClick">点击</button>
<script setup lang="ts"> const handleClick = () => { console.log('clicked') } </script>

要点

  • @v-on:的语法糖

  • Vue 3 中事件函数通常定义在setup()<script setup>

  • 事件名默认是DOM 原生事件


2. 内联事件表达式

<button @click="count++">+</button> <p>{{ count }}</p>
const count = ref(0)

说明

  • 可直接写 JS 表达式

  • 适合简单逻辑,不建议写复杂业务


二、事件参数与$event

1. 获取事件对象

<button @click="handleClick">点击</button>
const handleClick = (event: MouseEvent) => { console.log(event.target) }

Vue 会自动注入$event


2. 同时传自定义参数 + 事件对象

<button @click="handleClick(1, $event)">点击</button>
const handleClick = (id: number, event: MouseEvent) => { console.log(id, event) }

三、事件修饰符(重点)

1. 阻止冒泡 / 默认行为

修饰符作用
.stopevent.stopPropagation()
.preventevent.preventDefault()
<a href="#" @click.prevent>阻止默认</a> <div @click="parent"> <button @click.stop="child">子按钮</button> </div>

2. 捕获、只触发一次

修饰符作用
.capture捕获阶段触发
.once只执行一次
<button @click.once="submit">提交</button>

3. 键盘事件修饰符

<input @keyup.enter="submit" /> <input @keyup.esc="cancel" />

常用键:

  • .enter

  • .esc

  • .tab

  • .space

  • .delete

  • .up / down / left / right


4. 系统按键修饰符

<button @click.ctrl="doSomething">Ctrl + Click</button> <button @keyup.alt.enter="submit" />

支持:

  • .ctrl

  • .alt

  • .shift

  • .meta(Mac Command / Windows Win)


5. 鼠标按钮修饰符

<button @click.left>左键</button> <button @click.right.prevent>右键</button> <button @click.middle>中键</button>

四、事件处理与 Composition API

1.setup中事件绑定(推荐)

<script setup lang="ts"> const handleSubmit = () => { console.log('submit') } </script> <template> <button @click="handleSubmit">提交</button> </template>

2. 使用ref操作 DOM 绑定事件(不推荐优先)

<template> <button ref="btn">按钮</button> </template> <script setup lang="ts"> const btn = ref<HTMLButtonElement>() onMounted(() => { btn.value?.addEventListener('click', () => { console.log('native click') }) }) </script>

建议

  • 优先使用@click

  • 仅在第三方库或特殊场景操作 DOM


五、自定义事件(组件通信,核心)

1. 子组件触发事件(emit

<!-- Child.vue --> <script setup lang="ts"> const emit = defineEmits<{ (e: 'update', value: number): void }>() const add = () => { emit('update', 1) } </script> <template> <button @click="add">+1</button> </template>

2. 父组件监听事件

<Child @update="handleUpdate" />
const handleUpdate = (val: number) => { console.log(val) }

3. 事件命名规范(重要)

场景推荐
组件事件kebab-case
v-modelupdate:modelValue
emit('update:modelValue', newValue)

六、v-model本质是事件

1. v-model 等价写法

<Child v-model="value" />

等价于:

<Child :modelValue="value" @update:modelValue="value = $event" />

2. 多个 v-model(Vue 3 特性)

<Child v-model:title="title" v-model:visible="visible" />

子组件:

emit('update:title', 'new title') emit('update:visible', true)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:33:44

APP新增广告位别盲目!掌握4个关键思维,兼顾收益与体验

在广告变现的实践中&#xff0c;许多开发者会遇到一个两难问题&#xff1a;如何通过新增广告位有效提升收益&#xff0c;同时避免伤害用户体验&#xff0c;导致用户流失&#xff1f;实际上&#xff0c;盲目添加广告位可能适得其反。本文将分享在新增广告位前&#xff0c;笔者认…

作者头像 李华
网站建设 2026/4/18 5:34:42

Molecular Operating Environment (MOE) 完整安装与使用攻略

Molecular Operating Environment (MOE) 完整安装与使用攻略 【免费下载链接】最新MolecularOperatingEnvironmentMOELinuxWindows下载指南 最新 Molecular Operating Environment (MOE) Linux Windows 下载指南本仓库提供最新版本的 Molecular Operating Environment (MOE) 软…

作者头像 李华
网站建设 2026/4/18 5:42:31

自学嵌入式day32,线程

线程基本概念线程定义&#xff1a;在 Linux 中&#xff0c;线程属于某个进程&#xff0c;是轻量级的执行单元。每个进程默认有一个主线程&#xff0c;线程间是平级关系。作用&#xff1a;实现并发执行&#xff0c;提高资源利用率和响应速度。特征&#xff1a;进程是最小资源分配…

作者头像 李华
网站建设 2026/4/17 14:08:03

零基础入门:VSCode和Anaconda的Python开发环境搭建

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个新手友好的Python项目&#xff0c;指导用户安装和配置VSCode与Anaconda。项目应包括环境设置、扩展安装和第一个“Hello World”程序。AI应提供逐步指导&#xff0c;并解答…

作者头像 李华
网站建设 2026/4/17 17:46:42

如何进行微信个人号API二次开发?

在私域流量成为企业“救命稻草”的今天&#xff0c;微信早已不仅是聊天工具&#xff0c;而是价值万金的商业阵地。然而&#xff0c;现实往往很残酷&#xff1a;人力成本高&#xff1a; 员工每天耗费数小时在加好友、拉群、发朋友圈等重复劳动上。响应速度慢&#xff1a; 咨询量…

作者头像 李华