news 2026/7/10 4:12:47

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/7/9 23:38:34

Linux线程操作全指南

Linux线程概述与操作指南线程与进程对比线程是轻量级进程&#xff0c;属于某个进程&#xff0c;共享进程资源但拥有独立栈区&#xff08;默认8MB&#xff09;。进程资源独立&#xff0c;稳定性更高&#xff1b;线程崩溃可能导致整个进程崩溃。线程创建开销更小&#xff08;仅需…

作者头像 李华
网站建设 2026/7/10 13:39:28

传统VS智能:DBC文件处理效率对比实验

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个DBC文件处理效率对比工具。工具应能&#xff1a;1) 自动生成测试用DBC文件 2) 提供传统手动解析方法 3) 实现AI自动解析方法 4) 记录并对比两种方法的处理时间和准确性。输…

作者头像 李华
网站建设 2026/7/9 23:39:07

LobeChat能否支持生物识别?人脸/声纹/步态特征分析应用

LobeChat能否支持生物识别&#xff1f;人脸/声纹/步态特征分析应用 在智能设备日益渗透日常生活的今天&#xff0c;用户对AI助手的期待早已超越“能聊天”的基础功能。我们希望它认识我、理解我&#xff0c;甚至在我开口之前就知道我想做什么——这种“感知型交互”正成为下一代…

作者头像 李华
网站建设 2026/7/10 12:04:04

Miniconda实现Python多版本灵活切换

Miniconda 实现 Python 多版本灵活切换 在机器学习和科学计算的日常开发中&#xff0c;你是否也曾陷入这样的“环境地狱”&#xff1f;&#x1f631; “这个项目用 PyTorch 1.13&#xff0c;必须 Python 3.9&#xff0c;但我的系统是 3.11。”“同事跑通的代码&#xff0c;我一…

作者头像 李华
网站建设 2026/7/10 11:25:39

场馆预约小程序开发:解锁 “预约经济” 的高效解决方案

在数字化转型加速的背景下&#xff0c;场馆预约需求已渗透体育、办公、教育、文旅等多个领域。传统线下预约模式存在 “信息不透明、操作繁琐、管理低效” 等痛点&#xff0c;而小程序凭借 “轻量化、高触达、易操作” 的优势&#xff0c;成为场馆预约场景的理想载体。本文从核…

作者头像 李华
网站建设 2026/7/10 11:08:48

Product Hunt 每日热榜 | 2025-12-16

1. Unloop 标语&#xff1a;为注意力缺陷多动症&#xff08;ADHD&#xff09;和神经多样性思维者设计的视觉模式映射 介绍&#xff1a;Unloop 是一款可视化的模式映射工具&#xff0c;帮助你识别那些让你感到陷入困境的触发因素、想法、情绪和行为。把这些内容可视化&#xf…

作者头像 李华