Teleport Vue 3.0新特性之一。

Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但data、prop数据依旧能够共用的技术;
类似于 React 的 Portal。
主要解决的问题 因为Teleport节点挂载在其他指定的DOM节点下,完全不受父级style样式影响

使用方法

通过to 属性 插入指定元素位置 to=”body” 便可以将Teleport 内容传送到指定位置。

  1. <Teleport to="body">
  2. <Loading></Loading>
  3. </Teleport>

也可以自定义传送位置 支持 class id等 选择器

  1. <div id="app"></div>
  2. <div class="modal"></div>
  1. <Teleport to=".modal">
  2. <Loading></Loading>
  3. </Teleport>
  1. <Teleport to=".modal1">
  2. <Loading></Loading>
  3. </Teleport>
  4. <Teleport to=".modal2">
  5. <Loading></Loading>
  6. </Teleport>

v-if的优先级大于teleport

  1. <template>
  2. <div class="content">
  3. <teleport to="body">
  4. <div class="teleport">我是胡雪</div>
  5. </teleport>
  6. </div>
  7. </template>
  8. <script setup lang="ts">
  9. </script>
  10. <style lang="less" scope>
  11. .teleport {
  12. position: absolute;
  13. top: 10px;
  14. right: 10px;
  15. border: 1px solid red;
  16. }
  17. .content {
  18. padding: 20px;
  19. flex: 1;
  20. margin: 20px;
  21. overflow: auto;
  22. border: 1px solid #ccc;
  23. }
  24. </style>

image.png