返回顶部
首页 > 资讯 > 精选 >Vue中如何使用Teleport组件
  • 340
分享到

Vue中如何使用Teleport组件

2023-07-05 21:07:56 340人浏览 安东尼
摘要

这篇文章主要介绍“Vue中如何使用Teleport组件”,在日常操作中,相信很多人在Vue中如何使用Teleport组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中如何使用Teleport组件”的疑

这篇文章主要介绍“Vue中如何使用Teleport组件”,在日常操作中,相信很多人在Vue中如何使用Teleport组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中如何使用Teleport组件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

01-组件套组件层次结构很深时

比如:现在有两个组件,父组件,子组件,在后代组件内,添加一个按钮,弹出一个模态框,让它在页面垂直水平居中显示

如下所示,父组件如下所示App.vue

<template>    <div class="App">        我是父组件        <Child />    </div></template><script setup>    import Child from "./Child.vue"</script><style>.App {    width: 400px;    height: 400px;    background:red;}</style>

如下是Child组件,示例代码如下所示Child.vue,我们需要在孙(后代)组件,添加一个按钮,点击按钮,弹出一个弹框,水平垂直居中显示在页面中央

<template>    <div class="child">      <p>我是子组件</p>        <button @click="isModel=true">打开模态框</button>        <div class="mask-dialog" v-if="isModel">             <div class="box">                  <h3>我是标题</h3>                  <div>我是弹框内容</div>                  <div>                      <button @click="isModel=false">关闭</button>                  </div>             </div>        </div>    </div></template><script setup>import { ref } from "vue";let isModel = ref(false);</script><style>.child {    width: 300px;    height:300px;    background:green;}  .mask-dialog {    width: 100%;    height:100%;    position:absolute;    left:0;    top:0;    background:rgba(0,0,0,0.5)  }    .box {    width: 200px;    height:200px;    position:absolute;    left:50%;    top:50%;    transfORM:translate(-50%,-50%);    background:pink;    text-align:center;  }</style>

上面的子组件中有一个button按钮来触发打开当前组件的模态框,里面存在着控制弹框的显示和隐藏的逻辑,当嵌套的组件比较深,复杂时

如果父级元素存在定位,那在控制子元素的位置时,用CSStransform或者position:absolute,参照对象的变更,会破坏布局结构,会出现一些css样式

控制的问题,解决起来会非常的痛苦

那这个Teleport组件就是为了解决这类问题,可以将指定的DOM结构片段,独立于到组件外面去,不受当前组件布局结构的影响

经过Teleport的修改后

<template>    <div class="child">      <p>我是子组件</p>        <button @click="isModel=true">打开模态框</button>        <Teleport to="body">            <div class="mask-dialog" v-if="isModel">                 <div class="box">                      <h3>我是标题1</h3>                      <div>我是弹框内容</div>                      <div>                          <button @click="isModel=false">关闭</button>                      </div>                 </div>            </div>        </Teleport>      </div></template><script setup>import { ref } from "vue";let isModel = ref(false);</script><style>.child {    width: 300px;    height:300px;    background:green;}  .mask-dialog {    width: 100%;    height:100%;    position:absolute;    left:0;    top:0;    background:rgba(0,0,0,0.5)  }    .box {    width: 200px;    height:200px;    position:absolute;    left:50%;    top:50%;    transform:translate(-50%,-50%);    background:pink;    text-align:center;  }</style>

<Teleport>接收一个 to prop 来指定传送的目标。to 的值可以是一个 CSS 选择器字符串,或id,也可以是一个 DOM 元素对象。这段代码的作用就是告诉 Vue把以下模板片段传送到 body 标签下

<Teleport to="#some-id">html结构代码</Teleport><Teleport to=".some-class">html结构代码</Teleport><Teleport to="body">html结构代码</Teleport><Teleport to="html">html结构代码</Teleport>

02-Teleport组件

它是Vue官方提供的一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去也就是一种能够将我们的组件html结构移动到指定位置的技术

<teleport to="移动到指定的位置,可以是html,body,或id,class">   里面是Html结构模板内容</teleport>

注意

<Teleport> 挂载时,传送的 to 目标必须已经存在于DOM中。理想情况下,这应该是整个 Vue 应用 DOM 树外部的一个元素。如果目标元素也是由 Vue 渲染的,你需要确保在挂载 <Teleport> 之前先挂载该元素

这个teleport将指定的模板html,放置到页面当中指定的位置处,它是有条件的,不是可以任意传送的

在安装组件之前,目标元素必须存在,即,目标不能由组件本身呈现,理想情况下应该位于整个Vue组件树之外。

如下代码是不行的

<template>    <div>        <Teleport to=".content">            <div>我是头部的内容</div>        </Teleport>             </div>    <div>        底部内容        <div></div>    </div></template><script setup></script><style>h2 {    color: red;}</style>

03-需要知道的

teleport只是改变了渲染的 DOM 结构,它不会影响组件间的逻辑关系。也就是说,如果 <Teleport> 包含了一个组件,那么该组件始终和这个使用了 <teleport> 的组件保持逻辑上的父子关系。传入的 props 和触发的事件也会照常工作。

这也意味着来自父组件的注入也会按预期工作,子组件将在 Vue Devtools 中嵌套在父级组件下面,而不是放在实际内容移动到的地方

位置移动了,提现在结构模板上,但是数据逻辑依旧存在关联的

04-如何禁用 Teleport

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

<Teleport :disabled="isMobile">  ...</Teleport>

这里的 isMobile 状态可以根据 CSS media query 的不同结果动态地更新

05-多个 Teleport 共享目标时

一个可重用的模态框组件可能同时存在多个实例。对于此类场景,多个 <Teleport> 组件可以将其内容挂载在同一个目标元素上,而顺序就是简单的顺次追加,后挂载的将排在目标元素下更后面的位置上

比如下面这样的用例

<Teleport to=".content">  <div>A</div></Teleport><Teleport to=".content">  <div>B</div></Teleport>

渲染的结果为

<div class="content">  <div>A</div>  <div>B</div></div>

到此,关于“Vue中如何使用Teleport组件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Vue中如何使用Teleport组件

本文链接: https://lsjlt.com/news/355535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue中如何使用Teleport组件
    这篇文章主要介绍“Vue中如何使用Teleport组件”,在日常操作中,相信很多人在Vue中如何使用Teleport组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中如何使用Teleport组件”的疑...
    99+
    2023-07-05
  • Vue3之Teleport组件如何使用
    这篇文章主要介绍了Vue3之Teleport组件如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3之Teleport组件如何使用文章都会有所收获,下面我们一起来看看吧。Teleport 组件解决的问...
    99+
    2023-07-06
  • vue基于Teleport如何实现Modal组件
    这篇文章将为大家详细讲解有关vue基于Teleport如何实现Modal组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.认识Teleport像我们如果写Modal组件、Message组件、Loadi...
    99+
    2023-06-15
  • vue基于Teleport实现Modal组件
    目录1.认识Teleport2.Teleport的基本用法 3.第一步优化 4.第二步优化 5.实现Modal组件 1.认识Teleport 像我们如果写Modal组件、Messag...
    99+
    2024-04-02
  • Vue3之Teleport组件怎么使用
    Teleport 组件解决的问题版本:3.2.31如果要实现一个 “蒙层” 的功能,并且该 “蒙层” 可以遮挡页面上的所有元素,通常情况下我们会选择直接在 标签下渲染 “蒙层” 内容。如果在Vue.js 2 中实现这个功能,只能通过原生 D...
    99+
    2023-05-14
    Vue3 teleport
  • VueJs中如何使用Teleport及组件嵌套层次结构详解
    目录正文01-组件套组件层次结构很深时02-Teleport组件03-需要知道的04-如何禁用 Teleport05-多个 Teleport 共享目标时总结正文 ...
    99+
    2023-05-14
    VueJs使用Teleport组件 VueJs Teleport嵌套层次结构
  • Vue中如何使用component组件
    Vue中如何使用component组件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 内置的组件component场...
    99+
    2024-04-02
  • Vue中如何使用header组件
    这期内容当中小编将会给大家带来有关Vue中如何使用header组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、 header 组件开发 之数据的传递1. App.v...
    99+
    2024-04-02
  • Vue中使用Teleport的方法示例
    目录正文Teleport 在 Vue 中的使用禁用 Teleport 标签正文 通常,当我们在 Vue 中创建组件时,它们出现在我们期望的 DOM 结构中。但是,有时我们并不希望如此...
    99+
    2022-11-13
    Vue使用Teleport Vue Teleport
  • 极速上手 VUE 3 teleport传送门组件及使用语法
    目录一、teleport 介绍1.1、多个 teleport 使用二、为什么使用 teleport三、teleport 应用四、初学者容易遇到的坑一、teleport 介绍 tele...
    99+
    2024-04-02
  • 如何在vue中使用ant-design-vue组件
    目录在vue中使用ant-design-vue组件1. 安装2. 引入组件库3. 使用3.1 按钮样式3.2 导航栏样式3.3 表单样式在vue中使用ant-design-vue组件...
    99+
    2023-01-29
    vue使用ant-design-vue组件 ant-design-vue组件
  • Vue中如何使用异步组件
    Vue中如何使用异步组件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、前置要求建议使用webpack;Browserify在默认情况下...
    99+
    2024-04-02
  • 如何在vue中使用backtop组件
    如何在vue中使用backtop组件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码:<template> <div class=&qu...
    99+
    2023-06-14
  • Vue3内置组件Teleport使用方法详解
    目录1、Teleport用法2、完成模态对话框组件3、组件的渲染前言: Vue 3.0 新增了一个内置组件 teleport ,主要是为了解决以下场景: 有时组件模板的一部分逻辑上属...
    99+
    2024-04-02
  • Vue 3.0 中如何使用动态组件
    这篇文章给大家介绍Vue 3.0 中如何使用动态组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、组件注册1.1 全局注册在 Vue 3.0 中,通过使用 app 对象的 comp...
    99+
    2024-04-02
  • vue项目中如何使用footer组件
    今天就跟大家聊聊有关vue项目中如何使用footer组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。footer为公用组件,其他页面都需要引入,这...
    99+
    2024-04-02
  • vue中如何使用transition内置组件
    这篇文章给大家介绍vue中如何使用transition内置组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。基本概念Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡...
    99+
    2024-04-02
  • vue activated在子组件中如何使用
    本篇内容介绍了“vue activated在子组件中如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!页面:base:<templ...
    99+
    2023-06-25
  • Vue中如何使用全局组件和局部组件
    Vue中如何使用全局组件和局部组件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。组件 (Component) 是 Vue.js...
    99+
    2024-04-02
  • 如何使用单文件组件.vue
    小编给大家分享一下如何使用单文件组件.vue,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vuejs 自定义了一种.vue文件,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作