Teleport 传送门
文章目录前言一、基本用法1.1 为什么需要 Teleport1.2 Teleport 解决二、to 属性2.1 指定目标位置2.2 挂载点准备2.3 disabled 动态控制三、典型场景3.1 Modal 对话框3.2 Toast 全局通知3.3 全屏 Loading3.4 Dropdown 下拉菜单四、逻辑归属与事件冒泡4.1 组件树 vs DOM 树4.2 事件冒泡遵循组件树4.3 多个 Teleport 到同一目标五、SSR 行为5.1 默认原位渲染5.2 处理方案六、面试聚焦6.1 事件冒泡遵循组件树6.2 Teleport 在 SSR 时的行为6.3 Teleport 解决了什么问题七、易混淆点八、思考与练习总结前言Teleport是 Vue 3 内置组件可将子元素的 DOM 传送到页面其他位置突破父容器的 CSS 限制。本篇会讲清楚Teleport 的基本用法与to属性Modal、Toast、Loading 等典型场景逻辑归属与事件冒泡规则SSR 下的行为一、基本用法1.1 为什么需要 Teleport!-- 问题Modal 嵌套在组件内可能被父容器裁切 -- div classpage styleoverflow: hidden; position: relative; button clickopen true打开弹窗/button div v-ifopen classmodal !-- z-index 可能失效 -- 弹窗内容 /div /div父容器的overflow: hidden、transform、z-index等会限制子元素显示。Modal 需要渲染到body下才能全屏覆盖。1.2 Teleport 解决template button clickopen true打开弹窗/button Teleport tobody div v-ifopen classmodal-mask div classmodal-content p弹窗内容/p button clickopen false关闭/button /div /div /Teleport /template script setup import { ref } from vue const open ref(false) /script style .modal-mask { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 9999; } /styleDOM 渲染到body末尾但组件的 props、emit、生命周期仍属于父组件。二、to 属性2.1 指定目标位置!-- 传送到 body -- Teleport tobody.../Teleport !-- 传送到指定 id -- Teleport to#modal-root.../Teleport !-- 传送到 class -- Teleport to.app-container.../Teleportto接受 CSS 选择器字符串目标元素必须已存在于 DOM 中。2.2 挂载点准备!-- index.html --bodydividapp/divdividmodal-root/div!-- 可选专用挂载点 --/bodyTeleport to#modal-root Modal v-ifvisible / /Teleport2.3 disabled 动态控制Teleport tobody :disabledisMobile Modal / /Teleportdisabled为true时内容渲染在 Teleport 原位不传送SSR 或移动端回退时常用。三、典型场景3.1 Modal 对话框!-- components/Modal.vue -- template Teleport tobody Transition namefade div v-ifmodelValue classmodal-mask click.selfclose div classmodal-box slot / button clickclose关闭/button /div /div /Transition /Teleport /template script setup defineProps({ modelValue: Boolean }) const emit defineEmits([update:modelValue]) const close () emit(update:modelValue, false) /script配合Transition实现淡入淡出Teleport 确保遮罩覆盖全屏。3.2 Toast 全局通知!-- components/Toast.vue -- template Teleport tobody div classtoast-container TransitionGroup nametoast div v-formsg in messages :keymsg.id classtoast-item {{ msg.text }} /div /TransitionGroup /div /Teleport /template style .toast-container { position: fixed; top: 20px; right: 20px; z-index: 10000; } /styleToast 固定在视口右上角不受页面滚动和父容器影响。3.3 全屏 Loadingtemplate Teleport tobody div v-ifloading classloading-mask div classspinner加载中.../div /div /Teleport /template style .loading-mask { position: fixed; inset: 0; background: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; z-index: 99999; } /style3.4 Dropdown 下拉菜单template div classdropdown-trigger clickopen !open 选择项 /div Teleport tobody div v-ifopen classdropdown-menu :style{ top: menuTop px, left: menuLeft px } div v-foritem in options :keyitem{{ item }}/div /div /Teleport /template下拉菜单传送到 body避免被overflow: auto的表格或侧边栏裁切。四、逻辑归属与事件冒泡4.1 组件树 vs DOM 树Vue 组件树App → Page → Modal逻辑父子 DOM 树 body → div#app → ... ; body → div.modalTeleport 渲染位置Teleport只改变 DOM 位置不改变 Vue 组件树props / emit 仍走父组件生命周期仍属于定义 Teleport 的组件父组件可通过v-if控制 Teleport 内容4.2 事件冒泡遵循组件树!-- Parent.vue -- template div clickhandleParentClick Child / /div /template !-- Child.vue -- template Teleport tobody button clickhandleClick按钮/button /Teleport /template点击 Teleport 内的按钮click在 Child 组件内触发 → 沿Vue 组件树向 Parent 冒泡不会冒泡到 DOM 中 Teleport 的实际父元素如 body4.3 多个 Teleport 到同一目标Teleport to#modal-root ModalA v-ifshowA / /Teleport Teleport to#modal-root ModalB v-ifshowB / /Teleport多个 Teleport 传送到同一容器时按声明顺序追加到目标内。五、SSR 行为5.1 默认原位渲染服务端渲染时Teleport默认不传送内容渲染在组件原位 DOM 中。客户端 hydration 完成后才传送到to目标可能造成短暂闪烁。5.2 处理方案!-- 方案一SSR 时禁用 Teleport -- Teleport tobody :disabled!isClient Modal / /Teleport script setup import { ref, onMounted } from vue const isClient ref(false) onMounted(() { isClient.value true }) /script// 方案二Nuxt 等框架内置 SSR Teleport 支持// 需在服务端提供 #teleports 挂载点生产环境使用 Nuxt 等 SSR 框架时按框架文档配置 Teleport 挂载点。六、面试聚焦6.1 事件冒泡遵循组件树Teleport 只移动 DOM不改变 Vue 组件树。事件仍按组件父子关系冒泡不会冒泡到 DOM 中的实际父元素。6.2 Teleport 在 SSR 时的行为默认在原位渲染不传送。客户端激活后才移动到目标位置。可通过disabled或框架配置处理。6.3 Teleport 解决了什么问题Modal、Toast 等需要全屏/固定定位的 UI避免被父容器overflow、z-index、transform裁切或遮挡。七、易混淆点只改 DOM 不改组件树props/emit/生命周期仍属原组件。事件不沿 DOM 冒泡沿 Vue 组件树冒泡。to 目标必须存在挂载前 DOM 中需有对应元素。SSR 默认不传送hydration 后才移动注意闪烁问题。与 Portal 类似React Portal 概念相同Vue 3 内置为 Teleport。八、思考与练习1.Teleport 的作用是什么解析将子元素 DOM 传送到页面其他位置如 body突破父容器 CSS 限制逻辑仍属原组件。2.Modal 为什么常用 Teleport 到 body解析避免被父容器 overflow、z-index、transform 裁切确保遮罩全屏覆盖。3.Teleport 内点击事件如何冒泡解析遵循 Vue 组件树冒泡不遵循 DOM 树。事件向定义 Teleport 的组件的父级传递。4.SSR 时 Teleport 的行为解析默认在原位渲染客户端 hydration 后才传送到 to 目标。5.disabled 属性有什么用解析为 true 时不传送内容渲染在原位。SSR 回退或条件禁用传送时使用。总结TeleportVue 3 内置将 DOM 传送到指定位置逻辑仍属原组件toCSS 选择器指定目标body、#id、.class典型场景Modal、Toast、Loading、Dropdown事件冒泡遵循组件树不遵循 DOM 树SSR默认原位渲染需注意 hydration 闪烁

相关新闻

3个方法让网站离线可用:Python网站下载器实战指南

3个方法让网站离线可用:Python网站下载器实战指南

3个方法让网站离线可用:Python网站下载器实战指南 【免费下载链接】WebSite-Downloader A website downloader written with Python 项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader 你是否遇到过这些困扰?重要网页突然无法访问…

2026/6/26 16:27:09阅读更多 →
期末结课论文不用硬熬!Paperxie 课程论文智能写作,严格按页面步骤高效出稿

期末结课论文不用硬熬!Paperxie 课程论文智能写作,严格按页面步骤高效出稿

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/课程论文课程论文 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从开…

2026/6/26 16:27:09阅读更多 →
【维安康】射频功率放大器研发生产厂家:以全链条硬核实力,筑牢无线通信的“能量底座”

【维安康】射频功率放大器研发生产厂家:以全链条硬核实力,筑牢无线通信的“能量底座”

从5G基站的信号远覆盖,到卫星通信的稳定传输,再到工业场景下的抗干扰运行,射频功率放大器始终是决定无线系统性能的核心“心脏”。在国产射频技术加速突破的当下,维安康凭借全链路自主可控的产研体系,把高增益、高效率…

2026/6/26 16:27:09阅读更多 →
老Mac重获新生:OpenCore Legacy Patcher终极指南,让旧设备畅享最新macOS

老Mac重获新生:OpenCore Legacy Patcher终极指南,让旧设备畅享最新macOS

老Mac重获新生:OpenCore Legacy Patcher终极指南,让旧设备畅享最新macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为老Mac无…

2026/6/26 17:52:46阅读更多 →
隐私优先的 HeyPolo 新应用,能否抗衡 Life360 成熟技术与庞大用户群?

隐私优先的 HeyPolo 新应用,能否抗衡 Life360 成熟技术与庞大用户群?

位置共享应用新选择:HeyPolo 与 Life360 对比 如今多数人有智能手机,出于安全考虑,部分家长在孩子年幼时就配备设备。位置共享应用受欢迎,可追踪家人和朋友位置,精准定位并在到达特定地点时提醒,还可能有 S…

2026/6/26 17:52:46阅读更多 →
如何把企业微信群(微信群)里的公众号文章、文件、语音变成AI知识库丨WorkBuddy+ima实操课

如何把企业微信群(微信群)里的公众号文章、文件、语音变成AI知识库丨WorkBuddy+ima实操课

天天有人往企业微信(微信)工作群发:行业报告、学习文章、产品PPT、操作手册、会议记录...但:1.大多数人看文章\文档,只看个标题,真正想找的时候,全靠模糊记忆翻找;2.即使找到了&…

2026/6/26 17:52:46阅读更多 →
OpenCore Legacy Patcher:如何让老款Mac重获新生,完美升级最新macOS?

OpenCore Legacy Patcher:如何让老款Mac重获新生,完美升级最新macOS?

OpenCore Legacy Patcher:如何让老款Mac重获新生,完美升级最新macOS? 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当苹…

2026/6/26 17:52:46阅读更多 →
2025年终极网盘直链下载工具完全指南:一键获取真实下载地址

2025年终极网盘直链下载工具完全指南:一键获取真实下载地址

2025年终极网盘直链下载工具完全指南:一键获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

2026/6/26 17:52:46阅读更多 →
py之某聚合pan搜索接口

py之某聚合pan搜索接口

import requests import jsonheaders = {"accept": "*/*","accept-language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7","cache-control": "no-cache",

2026/6/26 17:47:46阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

一、前言:企业运维痛点与资源价值自博通收购 VMware 之后,原 VMware 公开免费下载渠道全面关闭,企业运维人员想要获取适配 HPE 慧与服务器的 ESXi 9 原厂镜像,必须注册博通账号、绑定有效授权才能下载,无授权账号无法获…

2026/6/26 0:02:15阅读更多 →
Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin作为一门现代编程语言,与Java的互操作性一直是其核心优势之一。为了让Kotlin代码能够无缝对接Java,Kotlin提供了多种注解来优化互操作体验,其中JvmStatic和JvmField是两个关键注解。它们分别用于解决静态成员和字段在Java中的访问问题&…

2026/6/26 0:02:15阅读更多 →
深入解析musl libc中的mmap实现源码

深入解析musl libc中的mmap实现源码

最近在阅读musl libc源码时,发现其mmap的实现非常精妙,特分享给大家。 一、代码整体结构 这段代码实现了__mmap函数,并通过weak_alias导出为mmap。这是典型的musl libc风格——提供弱符号以便用户可以重写。 weak_alias(__mmap, mmap); 二…

2026/6/26 0:02:15阅读更多 →