vue3 Teleport的说明及用法

ops/2024/11/2 4:20:14/

1、定义:

https://cn.vuejs.org/guide/built-ins/teleport#basic-usage

<Teleport> 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。

2、基本用法:​

有时我们可能会遇到这样的场景:一个组件模板的一部分在逻辑上从属于该组件,但从整个应用视图的角度来看,它在 DOM 中应该被渲染在整个 Vue 应用外部的其他地方。

这类场景最常见的例子就是全屏的模态框。理想情况下,我们希望触发模态框的按钮和模态框本身是在同一个组件中,因为它们都与组件的开关状态有关。但这意味着该模态框将与按钮一起渲染在应用 DOM 结构里很深的地方。这会导致该模态框的 CSS 布局代码很难写。

3、简单说明:

Teleport将<Teleport to="body">...</Teleport>标签中的内容,传送到指定的位置,比如 html,body等,这里的html与body是与html中的selector是一致的。

4、事例:这里我们得用多个嵌套的SFC才可以测试出来,看下图

在TransAttrsTestC中引用了一个Teleport,TeleportTest.vue。

其它的SFC定义如下:

TeleportTest.vue

<!--
可定制插槽和 CSS 过渡效果的模态框组件。
--><script>
import Modal from "./Modal.vue";export default {components: {Modal,},data() {return {showModal: false,};},
};
</script><template><div><button id="show-modal" @click="showModal = true">Show Modal</button><!-- 使用这个 modal 组件,传入 prop --><Teleport to="body"><modal :show="showModal" @close="showModal = false"><template #header><h3>Custom Header</h3></template></modal></Teleport></div>
</template>
<style>
.over {z-index: 999;width: 300px;height: 300px;position: relative;background-color: antiquewhite;
}
</style>
<script>
export default {props: {show: Boolean}
}
</script><template><Transition name="modal"><div v-if="show" class="modal-mask"><div class="modal-container"><div class="modal-header"><slot name="header">default header</slot></div><div class="modal-body"><slot name="body">default body</slot></div><div class="modal-footer"><slot name="footer">default footer<buttonclass="modal-default-button"@click="$emit('close')">OK</button></slot></div></div></div></Transition>
</template><style>
.modal-mask {position: fixed;z-index: 8;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);display: flex;transition: opacity 0.3s ease;
}.modal-container {width: 300px;margin: auto;padding: 20px 30px;background-color: #fff;border-radius: 2px;box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);transition: all 0.3s ease;
}.modal-header h3 {margin-top: 0;color: #42b983;
}.modal-body {margin: 20px 0;
}.modal-default-button {float: right;
}/** 对于 transition="modal" 的元素来说* 当通过 Vue.js 切换它们的可见性时* 以下样式会被自动应用。** 你可以简单地通过编辑这些样式* 来体验该模态框的过渡效果。*/.modal-enter-from {opacity: 0;
}.modal-leave-to {opacity: 0;
}.modal-enter-from .modal-container,
.modal-leave-to .modal-container {-webkit-transform: scale(1.1);transform: scale(1.1);
}
</style>

Modal.vue

这个事例中的二个文件SFC定义来自官方:https://cn.vuejs.org/examples/#modal

5、运行结果:

说明:

1)去掉Teleport与不去掉Teleport,运行的效果是一样的。

2)加上Teleport,那么这个部分的modal将会被加到<body></body>之间

3)去掉Teleport,那么modal会显示在这个SFC里面。

6、我们来看下二者的不同的地方:

有Teleport的时候,会在<body>...</body>之间加入,一般会在</body>之前。

没有Teleport的时候,会在TransAttrsTestC中加入。

7、总结:

这个例子,运行的效果虽然是一样的,但是在【元素】显示的位置是不一样的,Teleport会将TransAttrsTestC中的modal直接加入到body中。

如果没有Teleport的话,那么在那里定义,就属于那一个SFC。


http://www.ppmy.cn/ops/130322.html

相关文章

STM32HAL库定时器无法进入中断问题

HAL_TIM_Base_Start(): 该函数启动定时器但不会开启中断。它适用于不需要中断处理的定时器配置&#xff0c;仅用于定时器计数功能。使用它时&#xff0c;定时器会启动并在设置的周期内计数&#xff0c;但中断标志不会触发 CPU 中断。 HAL_TIM_Base_Start_IT(): 该函数不仅启动定…

在React项目中使用SpreadJS实现在线Excel表格功能

在React项目中使用SpreadJS实现在线Excel表格功能&#xff0c;可以让你的应用程序具备强大的表格编辑能力。以下是使用React和SpreadJS来创建一个在线Excel表格的基本步骤&#xff1a; 1. 初始化React项目 如果你还没有React项目&#xff0c;可以使用create-react-app脚手架快…

某小型CMS漏洞复现审计

SQL注入 漏洞复现&#xff1a; 登陆后台&#xff0c;点击页面删除按钮&#xff0c;抓包&#xff1a; rid参数存在sql注入&#xff0c;放入sqlmap检测成功&#xff1a; 代码分析&#xff1a; CtrlShiftF检索路由&#xff1a; 定位具体代码&#xff0c;为删除功能&#xff1a; …

OKHTTP断点续传

OKHTTP断点续传 文章目录 OKHTTP断点续传HTTP断点续传知识点RangeContent RangeEtag&If-Range&#xff08;文件唯一标志&#xff09; OKHTTP断点下载OKHTTP 简单短断点下载代码示例 Android 断点续传一直是面试的高频问点&#xff0c;这里从HTTP断点续传知识和Android续传思…

嵌入式web开发:boa、lighttpd

嵌入式web开发&#xff1a;boa、lighttpd https://blog.csdn.net/m0_37105371/category_10937068.html BOA服务器的移植-CSDN博客 【第1部分&#xff1a;boa服务器部署到ubuntu里】 http://www.boa.org/boa-0.94.13.tar.gz tar xvzf boa-0.94.13.tar.gz cd boa-0.94.13/src/ a…

Spring Boot实战:构建校园社团信息管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理校园社团信息管理系统的相关信息成为必然。…

鸿蒙网络编程系列40-TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的验签是网络编程中一个重要的功能&#xff0c;它保证了数字证书的真实性&#xff0c;在此基础上&#xff0c;我们才可以信任该证书&#xff0c;从而信任基于该证书建立的安全通道&#xff0c;所以说&#xff0c;数字证书的验签是通讯安全的基…

QT报错,QObject::setParent: Cannot set parent, new parent is in a different Thread

文章目录 一、背景分析二、错误原因跨线程设置父对象&#xff1a;对象迁移&#xff1a;线程间共享对象&#xff1a; 三、解决方案确保父子对象在同一线程&#xff1a;正确管理对象迁移&#xff1a;避免线程间共享对象&#xff1a; 四、代码示例五、总结 QT报错&#xff0c;QObj…