满口金牙 2023-06-21 13:48 采纳率: 91.1%
浏览 104
已结题

vue3 teleport 组件,怎么把 它传送到最前面


  <teleport to="body">
        <ChildrenVue />    # position:absolute
  </teleport>

这个默认是插 body最后面,
这样可能造成了ChildrenVue 不可见,有没有什么简便的办法 ,把 ChildrenVue  成为body的 firstchild
  • 写回答

16条回答 默认 最新

  • PhoenixRiser 2023-06-21 14:01
    关注
    获得0.45元问题酬金

    TechWhizKid参考GPT回答:

    Teleport 组件在 Vue 3 中默认会将组件传送到指定位置的末尾,因此直接用 Teleport 组件无法实现将组件传送到 body 的最前面。

    • 一种可能的解决方案是,在 body 标签内预先创建一个用于接收 Teleport 组件的占位元素,如一个 div,并将这个 div 设为 body 的第一个子元素。然后,你可以将 to 属性设置为该 div 的选择器,这样 Teleport 组件就会将其内容传送到 body 的最前面。

    例如:
    HTML:

    <body>
        <div id="teleport-target"></div>
        ...
    </body>
    

    Vue:

    <teleport to="#teleport-target">
        <ChildrenVue />    <!-- position:absolute -->
    </teleport>
    

    如果你真的要直接将元素传送到 body 的最前面,你可能要用 JavaScript 进行额外的操作,例如在页面加载时动态创建一个接收 Teleportdiv 并将其设为 body 的第一个子元素。
    以下是一个示例:

    mounted() {
        const target = document.createElement('div');
        document.body.insertBefore(target, document.body.firstChild);
        this.targetId = target.id = 'teleport-target-' + this._uid;
    },
    beforeUnmount() {
        const target = document.getElementById(this.targetId);
        if (target) {
            document.body.removeChild(target);
        }
    }
    

    然后在模板中使用这个动态创建的 div 的 ID:

    <teleport :to="`#${targetId}`">
        <ChildrenVue />    <!-- position:absolute -->
    </teleport>
    

    这种方法会在页面加载时修改 DOM,可能会影响页面的性能。

    评论

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 创建了问题 6月21日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上