我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue3内置组件Teleport使用方法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue3内置组件Teleport使用方法详解

前言:

Vue 3.0 新增了一个内置组件 teleport 主要是为了解决以下场景:

有时组件模板的一部分逻辑上属于该组件,而从技术角度来看,最好将模板的这一部分移动到 DOM Vue app 之外的其他位置

场景举例:一个 Button ,点击后呼出模态对话框

这个模态对话框的业务逻辑位置肯定是属于这个 Button ,但是按照 DOM 结构来看,模态对话框的实际位置应该在整个应用的中间

这样就有了一个问题:组件的逻辑位置和DOM位置不在一起

按照以前 Vue2 的做法,一般是使用 position: fixed; 等CSS属性强行把对话框定位到了应用的中间位置,属于没有办法的办法,下面展示下 teleport 的基础用法。

1、Teleport用法

用法非常简单,只需要使用 to 这个属性就可以把组件渲染到想要的位置


// 渲染到body标签下
<teleport to="body">
  <div class="modal">
    I'm a teleported modal! 
  </div>
</teleport>

也可以使用:


<teleport to="#some-id" />
<teleport to=".some-class" />
<teleport to="[data-teleport]" />


必须是有效的查询选择器或 HTMLElement

进一步

2、完成模态对话框组件

现在我们来封装一个标准的模态对话框


<template>
  <teleport to="body">
    <transition name="dialog-fade">
      <div class="dialog-wrapper" v-show="visible">
        <div class="dialog">
          <div class="dialog-header">
            <slot name="title">
              <span class="dialog-title">
                {{ title }}
              </span>
            </slot>
          </div>
          <div class="dialog-body">
            <slot></slot>
          </div>
          <div class="dialog-footer">
            <slot name="footer">
              <button @click="onClose">关闭</button>
            </slot>
          </div>
        </div>
      </div>
    </transition>
  </teleport>
</template>

<script>
import { defineComponent } from 'vue';

export default defineComponent({
  name: 'tdialog'
});
</script>

<script setup>
const props = defineProps({
  title: String,
  visible: Boolean
});

const emit = defineEmits(['close']);

const onClose = () => {
  emit('close');
};
</script>

使用的时候,只需要


<t-dialog title="LGD是不可战胜的" :visible="visible" @close="onClose"> 这是一段内容,萧瑟仙贝。 </t-dialog>

// ...
const visible = ref(false);

const onDialog = () => {
  visible.value = !visible.value;
};

const onClose = () => {
  visible.value = false;
};

更进一步

3、组件的渲染

上面我们已经把标准的模态对话框组件完成了,还有另外一种相似的,只需要展示少量文字的轻量级提示组件 Message

在上面的例子中,我们总是把 TDialog 组件写在使用的地方,但是这个 Messgae 组件,我们在想提示的时候使用一个js语句就把它呼出来,类似于下面的这样


// 呼出一个提示
Message({ message: '这是一条Message消息' });


想使用一个函数呼出来,我们需要准备下这个函数,这个函数的作用就是完成组件的渲染。


const Message = options => {
  // 准备渲染容器
  const container = document.createElement('div');
  // 生成vnode
  const vnode = createVNode(MessageConstructor, options);
  // 渲染
  render(vnode, container);
};


MessageConstructor 是什么?就是我们的SFC(单文件组件):


<template>
  <teleport to="#app">
    <transition name="message-fade">
      <div v-show="visible" ref="ins" class="message" :style="customStyle">{{ message }}</div>
    </transition>
  </teleport>
</template>

在线 体验

查看 代码

总结:

以上就是关于 teleport 组件的基础用法和扩展用法,给我们提供了不少的方便,到此这篇关于Vue3内置组件Teleport使用方法详解的文章就介绍到这了,更多相关Vue3内置组件Teleport用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue3内置组件Teleport使用方法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue3中内置组件Teleport的基本使用与典型案例

Teleport是一种能够将我们的模板移动到DOM中Vueapp之外的其他位置的技术,下面这篇文章主要给大家介绍了关于Vue3中内置组件Teleport的基本使用与典型案例的相关资料,需要的朋友可以参考下
2023-05-18

Vue3异步组件Suspense的使用方法详解

这篇文章主要介绍了Vue3异步组件Suspense的使用方法详解,需要的朋友可以参考下
2023-01-28

vue3动态组件使用详解

这篇文章主要介绍了vue3动态组件使用详解的相关资料,需要的朋友可以参考下
2023-02-27

详解Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)

这篇文章主要介绍了Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用),在vue2中ref被用来获取对应的子元素,然后调用子元素内部的方法,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
2022-11-13

Vue3异步组件suspense使用详解

vue在解析我们的组件时,是通过打包成一个js文件,当我们的一个组件引入过多子组件是,页面的首屏加载时间由最后一个组件决定优化的一种方式就是采用异步组件,这篇文章主要介绍了Vue3异步组件suspense,需要的朋友可以参考下
2022-12-28

Vue3中使用defineCustomElement定义组件详解

这篇文章主要为大家介绍了Vue3中使用defineCustomElement定义组件详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

aspjpeg组件使用方法284627详解

aspjpeg是一款非常强大的图片处理组件,纯英文版本,不过早已经有免费版和破解版,但是对其进行详细与深入介绍的文章却是不多,即使有也只牵涉到图片缩略和图片水印
2023-05-20

aspjpeg组件使用方法284435详解

aspjpeg是一款非常强大的图片处理组件,纯英文版本,不过早已经有免费版和破解版,但是对其进行详细与深入介绍的文章却是不多,即使有也只牵涉到图片缩略和图片水印
2023-05-20

aspjpeg组件使用方法284455详解

aspjpeg是一款非常强大的图片处理组件,纯英文版本,不过早已经有免费版和破解版,但是对其进行详细与深入介绍的文章却是不多,即使有也只牵涉到图片缩略和图片水印
2023-05-20

Android TabHost组件使用方法详解

最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下: main.xml布局文件:
2022-06-06

Android组件popupwindow使用方法详解

先看效果: 现在很多的应用效果都需要做的炫些,像UC,以及天天静听,效果很炫的,源码已经对外开放了,有兴趣的可以去研究下的 上源码 main.xml
2022-06-06

vue 内置组件 component 的用法示例详解

这篇文章主要介绍了vue内置组件component的用法,本文给大家介绍了component内置组件切换方法,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

VueJs中如何使用Teleport及组件嵌套层次结构详解

这篇文章主要为大家介绍了VueJs中如何使用Teleport及组件嵌套层次结构详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-14

编程热搜

目录