写点什么

Vue3 使用 Teleport 封装 一个 Dialog

作者:程序员海军
  • 2023-04-18
    上海
  • 本文字数:1015 字

    阅读完需:约 3 分钟

Vue3 使用 Teleport 封装 一个 Dialog

什么是 Teleport ?

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


简单的说,Teleport 可以把模板代码 传送到 其它组件中,:::

用法:

1. 通过 to 指定传送的位置

接收一个 to prop 来指定传送的目标。to 的 值可以是:

  • css 选择器字符串

  • DOM 元素对象


 <teleport to='body'>    //传送到 body 元素下,显示模板内容</teleport>


<teleport to='.main'> //传送到 class为 main 元素下,显示模板内容</teleport>

<teleport to='#content'> //传送到 id 为 content 元素下,显示模板内容</teleport>
复制代码


2. 禁用 teleport

在某些场景下可能需要视情况禁用 。举例来说,我们想要在桌面端将一个组件当做浮层来渲染,但在移动端则当作行内组件。我们可以通过对 动态地传入一个 disabled prop 来处理这两种不同情况。


<Teleport :disabled="isMobile">  ...</Teleport>
复制代码


3. 共享一个 Teleport

当多个 Teleport 的 to 值 都指向一个 css 选择器字符串 或者 元素标签时,且 Teleport 为显示状态时,多个 Teleport 的内容 会显示在一块。


<Modal  v-model:dialog-status="showStatus" title="登录" v-if="showStatus" @close="showTeleport">  <h2>我是自定义的内容</h2>  <hr>  <h3>v-model 学习</h3></Modal>

<teleport to='body' > <h1 v-if="showStatus" >👌 共享 teleport </h1></teleport>
复制代码



上面我们给 body 元素 添加了 两个目标, 显示状态时,都会显示出来。Modal 是 封装好的 Teleport。

封装一个 Dialog

 <template>    <teleport to='body' :disabled="true">            <div class="modal-mask" v-show="dialogStatus">                <div class="modal-wrapper">                    <div class="main">                        <div class="operate">                            <span @click="close">❌</span>                        </div>                        <div class="title">                            {{title}}                        </div>                        <div class="content">                            <slot></slot>                            <slot name="test"></slot>                        </div>                    </div>                </div>                </div>    </teleport></template>

复制代码

效果:

参考链接🔗


发布于: 刚刚阅读数: 3
用户头像

🏆微信公众号:【前端自学社区】 2020-04-02 加入

🏅目前从事物流,铁路相关的前端全栈开发工作. 🏆 InfoQ 首批签约作者 🏆荣获2021/2022年度社区共建奖 😊个人微信: daxin261

评论

发布
暂无评论
Vue3 使用 Teleport 封装 一个 Dialog_Vue_程序员海军_InfoQ写作社区