news 2026/4/16 16:21:39

Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透

文章目录

  • Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透
  • 1.Vue事件的核心机制
    • 1.1 原生事件(native events)
    • 1.2 子组件自定义事件(子组件 emit)
    • 1.3 浏览器 DOM 的事件冒泡机制
  • 2.事件相关的实用补充
    • 2.4 DOM 常用事件
    • 2.5 Vue 事件修饰符总览

Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透

为什么要理解 Vue 事件?

  • 只知道 @click,却分不清它属于谁

  • 子组件不 emit,父组件 @click 为何能触发?

  • 面试中被问 “emit 和 @click 区别?

1.Vue事件的核心机制

1.1 原生事件(native events)

当 @drop 写在 HTML 原生标签上,例如:

<div @drop="handleDrop"></div>

这说明:

  • 监听的是浏览器 DOM 的 drop 事件
  • 用户把文件拖到 上时触发
  • 不需要任何子组件 emit

示例如下:

<divclass="chunk-upload-trigger"@drop="handleDrop"@dragenter="handleDragEnter"@dragleave="handleDragLeave">

这些都是原生 DOM 事件,没有任何“子组件触发”的概念

1.2 子组件自定义事件(子组件 emit)

父组件中写入:

<Child@file-selected="onFileSelected"/>

等待子组件 Child 调用

emit('file-selected',file)

父组件收到这个事件并执行 onFileSelected

  • ChunkUploadTrigger 内部 emit(‘file-selected’, file)
  • UploadPanel 接收到
  • 执行 handleFileSelected

这种完全不涉及 DOM 事件。

1.3 浏览器 DOM 的事件冒泡机制

父组件中

<ChunkUploadTrigger @drop="handleDrop" />

子组件中

<div @drop="handleDropInside"></div>

子组件不用 emit 通知父组件,子组件父组件都是同名的事件,此时父组件的事件就会穿透绑定到子组件根元素,两者的执行顺序,childDrop() 会触发,parentDrop() 也会触发,两者触发顺序按 DOM 事件流来(冒泡顺序)

DOM 事件冒泡不关心你是不是在一个文件、一个组件,它只关心 DOM 节点树。

父组件根 DOM └── 子组件根 DOM └── 子组件内部 DOM

所以虽然写在了两个.vue 文件,但是渲染出来的其实是跟在一个文件里写了两个 父子div 没有任何区别,事件冒泡就是沿着这棵 DOM 树往上走的

<Parent> <ChunkUploadTrigger /> </Parent> <div class="parent-root"> <div class="chunk-upload-trigger"> ← 子组件根节点 <div>...</div> </div> </div>

2.事件相关的实用补充

2.4 DOM 常用事件

浏览器原生事件,放在 HTML 标签上就能触发

鼠标事件

click,dblclick,mousedown,mouseup

键盘事件

keydown,keyup,keypress

输入 & 表单事件

dragenter,dragover,dragleave,drop

其他 DOM 事件

scroll,wheel,resize,load,error

2.5 Vue 事件修饰符总览

修饰符含义对应的 DOM 行为
.stop阻止事件冒泡event.stopPropagation()
.prevent阻止默认行为event.preventDefault()
.capture使用捕获模式addEventListener(…, true)
.self只有事件目标是当前元素时触发event.target === currentTarget
.once事件只触发一次自动 removeEventListener
.passive表示监听器不会调用 preventDefaultpassive: true

比如:

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

移动设备Windows应用终极指南:从零到完美显示

移动设备Windows应用终极指南&#xff1a;从零到完美显示 【免费下载链接】mobox 项目地址: https://gitcode.com/GitHub_Trending/mo/mobox 在移动设备上运行Windows应用已经成为现实&#xff0c;通过Mobox与Termux-X11的强大组合&#xff0c;我们可以在手机上获得接近…

作者头像 李华
网站建设 2026/4/16 12:56:35

杭州商业空间效果图可靠之选,半条鱼设计公司咋样?

杭州商业空间效果图可靠之选&#xff0c;半条鱼设计公司测评在杭州&#xff0c;商业空间的设计至关重要&#xff0c;而效果图更是项目前期的关键展示。半条鱼设计公司作为行业内的一员&#xff0c;究竟表现如何呢&#xff1f;下面就为大家详细测评。专业可靠的设计实力半条鱼设…

作者头像 李华
网站建设 2026/4/16 14:38:43

网络安全专业,在校大学生如何赚外快,实现财富自由?

如今&#xff0c;计算机行业内卷严重&#xff0c;我们不找点赚外快的路子这么行呢&#xff1f; 今天就来说说网络安全专业平时都怎么赚外快。 一、安全众测 国内有很多成熟的src众测平台&#xff0c;如漏洞盒子、火线众测、补天、CNVD、漏洞银行等。一些大厂也有自己的src&a…

作者头像 李华
网站建设 2026/4/16 10:30:33

QuickMapServices:QGIS插件地图服务一键添加终极指南

QuickMapServices是一款功能强大的QGIS地理数据服务插件&#xff0c;它彻底改变了传统地图服务添加的复杂流程。这款开源工具让用户能够一键发现并添加各种地图服务作为基础图层&#xff0c;为GIS工作流程带来革命性的便捷体验。 【免费下载链接】quickmapservices QGIS plugin…

作者头像 李华
网站建设 2026/4/15 15:47:53

BlockTheSpot:3分钟快速拦截Spotify广告的终极解决方案

BlockTheSpot&#xff1a;3分钟快速拦截Spotify广告的终极解决方案 【免费下载链接】BlockTheSpot Video, audio & banner adblock/skip for Spotify 项目地址: https://gitcode.com/gh_mirrors/bl/BlockTheSpot 还在为Spotify的频繁广告打断而烦恼吗&#xff1f;Bl…

作者头像 李华
网站建设 2026/4/16 14:27:34

腾讯云渠道商:腾讯云快照和镜像备份区别在哪?

一、引言 在云时代数据保护领域&#xff0c;快照与镜像备份是两大核心技术&#xff0c;但超过60%的用户对其差异认知模糊&#xff0c;导致30%的误用率和20%的成本浪费。腾讯云快照与镜像备份分别解决不同维度的数据保护需求&#xff0c;正确使用可节省40%存储成本&#xff0c;提…

作者头像 李华