欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 28.vue3学习篇- teleport

28.vue3学习篇- teleport

2025/8/27 11:54:07 来源:https://blog.csdn.net/qq_34334992/article/details/141712860  浏览:    关键词:28.vue3学习篇- teleport

在 Vue 3 中,<Teleport>是一个强大的功能,它允许你将一个组件的模板内容渲染到 DOM 中的不同位置,而不是在该组件的父级组件的 DOM 层级中渲染。

以下是一个基本的使用示例:

// src/dialog.vue 公共弹窗<template><div class="portals"><button @click="ShowNotification">trigger Notification</button> <teleport to='#portal'><div v-if="isOpen" class="notification">this is rendering outside of this child component</div></teleport></div>
</template><script>
import { ref } from 'vue'
export default {setup () {const isOpen = ref(false);var closePopup;const ShowNotification = () => {isOpen.value = trueclearTimeout(closePopup);closePopup = setTimeout(() => {isOpen.value = false}, 2000)};return {isOpen,ShowNotification}}
}</script>
// index.html<!-- portal -->
<div id="portal"></div>
// main.jsconst dialog = createApp(Dialog)
dialog.mount('#portal')

在这个例子中,<Teleport>组件将内部的<div>内容渲染到了body元素中。

你还可以通过传递一个 CSS 选择器字符串或一个实际的 DOM 元素引用,将内容传送到特定的目标位置。

<template><div><Teleport to="#my-target-element"><div>这部分内容将被渲染到具有 id 为 my-target-element 的元素内。</div></Teleport></div>
</template>

或者使用一个动态的目标:

<template><div><input type="text" v-model="targetId"><Teleport :to="targetId? `#${targetId}` : undefined"><div>这部分内容将根据输入的目标 ID 进行渲染。</div></Teleport></div>
</template><script setup>
import { ref } from 'vue';
const targetId = ref('');
</script>

<Teleport>在处理模态框、弹出窗口或需要将特定内容放置在特定位置而不受父组件布局限制的情况下非常有用。

需要注意的是,被<Teleport>传送的内容会脱离其原始组件的作用域,这意味着父组件中的样式和事件绑定可能不会自动应用到传送的内容上。如果需要,可以在传送的目标位置手动添加适当的样式和事件处理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词