返回顶部
首页 > 资讯 > 精选 >VueJs中怎么使用Teleport及组件嵌套层次结构是什么
  • 695
分享到

VueJs中怎么使用Teleport及组件嵌套层次结构是什么

2023-07-05 21:07:30 695人浏览 安东尼
摘要

这篇文章主要讲解了“Vuejs中怎么使用Teleport及组件嵌套层次结构是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VueJs中怎么使用Teleport及组件嵌套层次结构是什么”吧

这篇文章主要讲解了“Vuejs中怎么使用Teleport及组件嵌套层次结构是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VueJs中怎么使用Teleport及组件嵌套层次结构是什么”吧!

正文

DOM结构相对比较复杂,层级嵌套比较深的组件内,需要根据相对应的模块业务处理一些逻辑,该逻辑属于当前组件

但是从整个页面应用的视图上看,它在DOM中应该被渲染在整个vue应用外部的其他地方,不能影响组件的结构

比较常见的应用场景:就是全屏的模态框,控制元素的位置,也是可以处理的,但是比较麻烦

在理想情况下,我们希望在具体的组件中,给元素绑定的事件,与具体要控制的DOM元素结构在同一个组件中,具体的位置处,保持一定的相关联性

而不用特意的把一些DOM结构给分离出去,然而,在同一组件中,触发模态框的按钮和模态框本身在同一组件中

因为他们都与组件的开关状态有相关联,模态框与按钮一起渲染在应用DOM结构很深的地方,会导致模态框的CSS布局位置非常难控制

鉴于这样的场景和困难,Vue官方提供了一个Teleport组件,很好的可以解决这个问题,让开发者不需要顾虑DOM结构的问题

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 class="header">        <Teleport to=".content">            <div>我是头部的内容</div>        </Teleport>    </div>    <div class="footer">        底部内容        <div class="content"></div>    </div></template><script setup></script><style lang="less">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>

感谢各位的阅读,以上就是“VueJs中怎么使用Teleport及组件嵌套层次结构是什么”的内容了,经过本文的学习后,相信大家对VueJs中怎么使用Teleport及组件嵌套层次结构是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: VueJs中怎么使用Teleport及组件嵌套层次结构是什么

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

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

猜你喜欢
  • VueJs中怎么使用Teleport及组件嵌套层次结构是什么
    这篇文章主要讲解了“VueJs中怎么使用Teleport及组件嵌套层次结构是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VueJs中怎么使用Teleport及组件嵌套层次结构是什么”吧...
    99+
    2023-07-05
  • VueJs中如何使用Teleport及组件嵌套层次结构详解
    目录正文01-组件套组件层次结构很深时02-Teleport组件03-需要知道的04-如何禁用 Teleport05-多个 Teleport 共享目标时总结正文 ...
    99+
    2023-05-14
    VueJs使用Teleport组件 VueJs Teleport嵌套层次结构
  • React中嵌套组件的构建顺序是什么
    这篇文章将为大家详细讲解有关React中嵌套组件的构建顺序是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。这里有一个疑问是,在嵌套组件中,是父组件先构建,还是子组件先构建?是子组件先更新...
    99+
    2023-06-14
  • go结构体嵌套指针怎么使用
    在Go语言中,我们可以使用结构体嵌套指针来建立复杂的数据结构。下面是一个示例: package main import "...
    99+
    2024-02-29
    go
  • 怎么在golang中利用结构体嵌套的切片数组
    本篇文章为大家展示了怎么在golang中利用结构体嵌套的切片数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是golanggolang 是Google开发的一种静态强类型、编译型、并发型,并具...
    99+
    2023-06-14
  • vue怎么使用refs获取嵌套组件中的值
    本文小编为大家详细介绍“vue怎么使用refs获取嵌套组件中的值”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么使用refs获取嵌套组件中的值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用refs获...
    99+
    2023-06-29
  • 控件Repeater嵌套使用的方法是什么
    在ASP.NET中,可以通过在Repeater控件的ItemTemplate中嵌套另一个Repeater控件来实现Repeater的...
    99+
    2023-09-25
    Repeater
  • java条件运算符嵌套使用的方法是什么
    在Java中,可以使用条件运算符(三元运算符)嵌套来实现多个条件的判断。嵌套条件运算符的语法如下:```condition1 va...
    99+
    2023-10-12
    java
  • Vue组件是什么及怎么应用
    本篇内容主要讲解“Vue组件是什么及怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue组件是什么及怎么应用”吧!什么是组件用面向对象的思维去理解Vue...
    99+
    2024-04-02
  • gzip压缩文件底层结构及文件损坏的修复方法是什么
    本文小编为大家详细介绍“gzip压缩文件底层结构及文件损坏的修复方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“gzip压缩文件底层结构及文件损坏的修复方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-04
  • Vue中的动态组件是什么及怎么用
    这篇“Vue中的动态组件是什么及怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的动态组件是什么及怎么用”文章吧...
    99+
    2023-07-04
  • C++引用怎么使用及底层原理是什么
    本篇内容介绍了“C++引用怎么使用及底层原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!引用引用不是定义一个新变量,而是给已存在的变...
    99+
    2023-06-30
  • ​Android文件系统的结构及目录用途是什么
    Android文件系统的结构是由多个目录组成的,每个目录有不同的用途。以下是Android文件系统的一些重要目录及其用途: /s...
    99+
    2023-10-23
    ​Android
  • php全局数组是什么及怎么使用
    这篇文章主要介绍了php全局数组是什么及怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php全局数组是什么及怎么使用文章都会有所收获,下面我们一起来看看吧。php全局数组有9个:1、“$GLOBALS”...
    99+
    2023-06-30
  • Android组件化架构开发--为什么要使用组件化?组件分层?组件路由的简单实现。
    文章目录 android组件化架构开发一.为什么要使用组件化1.1 单工程项目结构1.2 什么是组件化 二. 组件分层三. 组件化项目搭建流程3.1 创建业务组件3.2 创建基础组件3....
    99+
    2023-08-31
    android 架构
  • WPF中的附加事件是什么及怎么使用
    今天小编给大家分享一下WPF中的附加事件是什么及怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是附加事件Micr...
    99+
    2023-07-04
  • linux中apt是什么及怎么使用
    这篇文章主要介绍“linux中apt是什么及怎么使用”,在日常操作中,相信很多人在linux中apt是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux中...
    99+
    2023-04-27
    linux apt
  • Vue中observable是什么及怎么使用
    这篇文章主要介绍“Vue中observable是什么及怎么使用”,在日常操作中,相信很多人在Vue中observable是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中observabl...
    99+
    2023-07-04
  • Vue3中reactive是什么及怎么使用
    这篇文章主要讲解了“Vue3中reactive是什么及怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3中reactive是什么及怎么使用”吧!Vue3 reactive的理解1...
    99+
    2023-06-30
  • vue前端重构computed及watch组件通信怎么使用
    这篇文章主要介绍“vue前端重构computed及watch组件通信怎么使用”,在日常操作中,相信很多人在vue前端重构computed及watch组件通信怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作