vue3中解决组件间 css 层级问题最佳实践(Teleport的使用)

定义:

<Teleport> 是 Vue 3 中引入的一个内置组件,用于将组件的内容渲染到 DOM 中的指定位置,而不受组件层级结构的限制。这在处理模态框、通知、下拉菜单等需要脱离当前组件层级的情况下非常有用。

通俗来说,Teleport的功能是将当前组件挂载到应用的顶层,与App组件同级。这样做的原因是,如果一个组件嵌套在Vue应用的内部,处理这个组件的定位、z-index以及样式会变得相当棘手。通过使用Teleport,可以轻松解决组件之间的CSS层级问题,使得样式管理更加简便有效。这种方式不仅简化了布局设计,还避免了因层级嵌套带来的样式冲突或覆盖问题。

使用:

   <Teleport to="body"><add-dialog>这是一个需要改变层级的弹窗</add-dialog></Teleport>

<Teleport> 组件包含两个主要的属性:

  1. to: 指定目标容器,可以是一个 CSS 选择器字符串或一个 DOM 元素。

  2. disabled: 可选属性,用于控制是否禁用 Teleport。如果为 true,内容将不会被传送到目标容器,而是在原地渲染。

多个teleport还可以挂载到同一个元素下 

<Teleport to="body"><add-dialog>这是第一个需要改变层级的弹窗</add-dialog>
</Teleport>
<Teleport to="body"><user-dialog>这是第二个需要改变层级的弹窗</user-dialog>
</Teleport>

多个 <Teleport> 组件可以将其内容依次挂载到同一个目标元素上,按照先后顺序追加,后挂载的内容将放置于目标元素下的更靠后位置。

总结:

<Teleport> 是 Vue 3 中一个非常强大的工具,特别适合处理那些需要脱离当前组件层级的 UI 元素。通过 Teleport,你可以更灵活地控制组件的渲染位置,而不必担心 DOM 结构的限制。

拓展:

vue3中新增了哪些新的内置组件和特性?

Vue 3 引入了一些新的内置组件和特性,但并没有新增大量的 HTML 标签。Vue 3 的核心仍然是基于现有的 HTML 标签和自定义组件。以下是 Vue 3 中新增的主要内置组件和特性:

1. <Teleport>

  • 作用: 将组件的内容渲染到 DOM 中的指定位置,而不受组件层级结构的限制。

  • 使用场景: 模态框、通知、下拉菜单等需要脱离当前组件层级的情况。

  • 示例:

<Teleport to="body"><div class="modal">这是一个模态框</div>
</Teleport>

2. <Suspense>

  • 作用: 用于处理异步组件的加载状态,提供 fallback 内容(如加载动画)直到异步组件加载完成。

  • 使用场景: 异步组件、异步数据加载等。

  • 示例:

<Suspense><template #default><AsyncComponent /></template><template #fallback><div>加载中...</div></template>
</Suspense>

3. <Fragment>

  • 作用: Vue 3 默认支持多根节点组件(Fragment),不再需要包裹一个单独的根元素。

  • 使用场景: 简化模板结构,避免不必要的包裹元素。

  • 示例:

<template><div>第一个元素</div><div>第二个元素</div>
</template>

4. v-model 的增强

  • Vue 3 对 v-model 进行了改进,支持多个 v-model 绑定,并且可以自定义修饰符。

  • 示例:

<ChildComponent v-model:title="pageTitle" v-model:content="pageContent" />

5. <script setup> 语法糖

  • 作用: 简化 Composition API 的使用,使代码更简洁。

  • 使用场景: 单文件组件(SFC)中使用 Composition API。

  • 示例:

<script setup>
import { ref } from 'vue';
const count = ref(0);
</script><template><button @click="count++">{{ count }}</button>
</template>

6. <style scoped> 的改进

  • Vue 3 支持在 <style scoped> 中使用深度选择器 :deep(),用于样式穿透。

  • 示例:

<style scoped>
.parent :deep(.child) {color: red;
}
</style>

7. <Transition> 和 <TransitionGroup> 的改进

  • Vue 3 对过渡动画组件进行了优化,支持更多的动画场景和配置。

  • 示例:

<Transition name="fade"><div v-if="show">内容</div>
</Transition>

8. <KeepAlive> 的改进

  • Vue 3 对 <KeepAlive> 组件进行了增强,支持更细粒度的缓存控制。

  • 示例:

<KeepAlive :include="['ComponentA', 'ComponentB']"><component :is="currentComponent" />
</KeepAlive>

9. <component> 的改进

  • Vue 3 中 <component> 支持动态组件切换,并且可以结合 v-model 使用。

  • 示例:

<component :is="currentComponent" v-model="data" />

10. v-bind 的 CSS 变量支持

  • Vue 3 允许在 <style> 中使用 v-bind 绑定组件的响应式数据。

  • 示例:

<template><div class="text">Hello</div>
</template><script setup>
import { ref } from 'vue';
const color = ref('red');
</script><style scoped>
.text {color: v-bind(color);
}
</style>

总结

Vue 3 并没有新增大量的 HTML 标签,而是通过引入新的内置组件(如 <Teleport> 和 <Suspense>)以及对现有特性的增强(如 v-model<script setup> 等)来提升开发体验和功能灵活性。这些新特性使得 Vue 3 更加强大和现代化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密度提升30%!Intel 18A工艺正式开放代工

快科技2月23日消息&#xff0c;Intel官方网站悄然更新了对于18A(1.8nm级)工艺节点的描述&#xff0c;称已经做好了迎接客户项目的准备&#xff0c;将在今年上半年开始流片&#xff0c;有需求的客户可以随时联系。 Intel宣称&#xff0c;这是在北美地区率先量产的2nm以下工艺节…

docker中常用的命令

一、服务命令 systemctl start docker.service 启动docker服务 systemctl stop docker.service 关闭docker服务 systemctl enable docker.service 设置docker服务开机启动 systemctl disable docker.service .禁止docker服务开机自启动 二、镜像命令 d…

架构师论文《智慧医疗系统中的数据集成与共享》

智慧医疗系统中的数据集成与共享 摘要 随着医疗信息化的发展&#xff0c;如何实现跨系统、跨机构的数据集成与共享成为智慧医疗建设的核心问题。2019年&#xff0c;我所在的医疗科技公司承接了某省卫生健康委员会主导的“区域医疗信息化平台”项目。该平台旨在整合区域内三甲医…

请求go构建缓存,go clean -cache

go clean -cache go 构建时会产生很多缓存&#xff0c; 一般是目录&#xff1a;/Users/xxx/Library/Caches/go-build 此目录README&#xff1a; This directory holds cached build artifacts from the Go build system. Run "go clean -cache" if the directory …

mybatis从接口直接跳到xml的插件

在使用 MyBatis(包括 MyBatis-Plus)时,如果你希望从接口方法直接跳转到对应的 XML 映射文件中的 SQL 语句定义,可以借助一些开发工具或插件来实现这一功能。以下是几种常见的方法和插件推荐: 方法一:使用 IDE 内置功能 IntelliJ IDEA IntelliJ IDEA 提供了对 MyBatis …

计算机视觉行业洞察--影像行业系列第一期

计算机视觉行业产业链的上下游构成相对清晰&#xff0c;从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类&#xff0c;视觉的硬件主要指芯片、…

Spring事务原理 二

在上一篇博文《Spring事务原理 一》中&#xff0c;我们熟悉了Spring声明式事务的AOP原理&#xff0c;以及事务执行的大体流程。 本文中&#xff0c;介绍了Spring事务的核心组件、传播行为的源码实现。下一篇中&#xff0c;我们将结合案例&#xff0c;来讲解实战中有关事务的易…

逻辑函数的神经网络实现

1.单层感知器实现基本逻辑函数 先给大家抛出一道例题 &#xff08;一&#xff09;种类 a.OR函数 目标&#xff1a;当至少一个输入为1时&#xff0c;输出1&#xff1b;否则输出0。 权重设置&#xff1a; 输入权重&#xff1a;所有 wi1&#xff08;i1,2,...,m&#xff09;。…

SF-HCI-SAP问题收集1

最近在做HCI的集成&#xff0c;是S4的环境&#xff0c;发现很多东西都跑不通&#xff0c;今天开始收集一下错误点 如果下图冲从0001变成0010&#xff0c;sfiom_rprq_osi表就会存数据&#xff0c;系统检查到此表就会报错&#xff0c;这个选项的作用就是自定义信息类型也能更新&a…

(面试经典问题之分布式锁)分布式锁的基本原理、作用以及实现

一、什么是分布式锁 分布式锁指的是在分布式场景中实现互斥类型的锁。 分布式是什么意思&#xff1f;分布式表示运行的节点可能在不同的机器或不同的网段中&#xff0c;节点间通信通过socket。互斥类型是什么意思&#xff1f;互斥类型表示同一时刻只允许一个执行体进入临界资…

机械硬盘与固态硬盘的区别-机械硬盘的未来在哪里?

随着近年来固态硬盘的技术成熟和成本的下探&#xff0c;固态硬盘&#xff08;SSD&#xff09;俨然有要取代传统机械硬盘&#xff08;HDD&#xff09;的趋势&#xff0c;但目前单位容量下机械硬盘每GB价格相比闪存还有5-7倍的优势&#xff0c;那么机械硬盘是否已经发展到极限&am…

06排序 + 查找(D1_排序(D1_基础学习))

目录 学习预热&#xff1a;基础知识 一、什么是排序 二、为什么要排序 三、排序的稳定性 四、排序稳定性的意义 五、排序分类方式 方式一&#xff1a;内外分类 方式二&#xff1a;比较分类 六、排序算法性能评估 1. 算法的时间复杂度 2. 算法的空间复杂度 七、知识小…

简讯:Rust 2024 edition and v1.85.0 已发布

详见 https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html 升级方法&#xff1a;rustup update stable

Python 错误和异常处理

目录 try-except块 例子&#xff1a; 输出&#xff1a; 捕获多种异常 例子&#xff1a; else和finally 例子&#xff1a; 输出&#xff1a; 自定义异常 例子&#xff1a; 输出&#xff1a; 好的&#xff0c;简单来说&#xff0c;错误和异常处理是编程中用来处理程序…

Linux系统使用Docker部署Geoserver并做数据挂载进行地图服务的发布和游览

文章目录 1、前提环境2、拉取geoserver镜像3、创建数据挂载目录4、 运行容器5、 测试使用&#xff08;发布shp数据为服务&#xff09;5.1、创建工作区5.2、添加数据存储5.3、发布图层5.4、服务游览 1、前提环境 部署环境&#xff1a;Linux&#xff0c;Centos7 &#xff0c;Doc…

Innovus中快速获取timing path逻辑深度的golden脚本

在实际项目中我们经常会遇到一条timing path级数特别多&#xff0c;可能是一两页都翻不完。此时&#xff0c;我们大都需要手工去数这条path上到底有哪些是设计本身的逻辑&#xff0c;哪些是PR工具插入的buffer和inverter。 数字IC后端手把手培训教程 | Clock Gating相关clock …

Python爬虫实战:从零到一构建数据采集系统

文章目录 前言一、准备工作1.1 环境配置1.2 选择目标网站 二、爬虫实现步骤2.1 获取网页内容2.2 解析HTML2.3 数据保存 三、完整代码示例四、优化与扩展4.1 反爬应对策略4.2 动态页面处理4.3 数据可视化扩展 五、注意事项六、总结互动环节 前言 在大数据时代&#xff0c;数据采…

SpringBoot中实现限流和熔断功能

我们将使用Java的ScheduledExecutorService来实现一个简单的令牌桶算法(Token Bucket Algorithm),并结合一个自定义的服务类来处理第三方API调用。 1. 创建限流器 首先,创建一个简单的限流器类: import java.util.concurrent.*;public class SimpleRateLimiter {

如何使用Python快速开发一个带管理系统界面的网站-解析方案

如果你想用 Python 开发一个 管理系统界面 的网站&#xff0c;并且希望界面美观&#xff0c;可以考虑以下几个框架和库&#xff1a; 1. Streamlit&#xff08;快速、简洁&#xff09; 适合&#xff1a;数据分析、仪表盘、内部管理系统特点&#xff1a; 写法简单&#xff0c;类…

Git常见命令--助力开发

git常见命令&#xff1a; 创建初始化仓库&#xff1a; git 将文件提交到暂存区 git add 文件名 将文件提交到工作区 git commit -m "注释&#xff08;例如这是发行的版本1&#xff09;" 文件名 查看状态 如果暂存区没有文件被提交显示&#xff1a; $ git status On…