vue3新特性teleport传送原来这么神奇

简介: vue3新特性teleport传送原来这么神奇

我对teleport的理解


teleport有传送的意思,读音【te li po t】[嘻嘻],看官们应该知道读啥子了吧


它可以将你写的代码传送到某一个地方


传送到哪一个地方呢?


传送到你标记的地方,比如说传送到body下,html下


官方说:Teleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,


上面这一句话是说传送到除了app之外的地方。


也就是说不能够传送到app之内。【注意了】


点像哆啦A梦的“任意门”


主要运用在弹窗上,消息提示,这样的场景!


下面我们就来简单使用一下:


我们将弹窗组件移动到body下


场景描述


a-test组件中有b-test组件,b-test组件中有c-mask[弹窗组件]


我们点击按钮,将b-test组件中的组件c-mask[弹窗组件]移动到body下


容器下有a-test组件


<template>
  <div class="box">
    <a-test></a-test>  
  </div>
</template>
<script>
import atest from '../components/a-test.vue'
  export default {
    components:{
      'a-test':atest,
    },
  }
</script>


a-test组件下有b-test组件


<template>
  <div class="a-test" >
    我是a-test组件
    <b-test></b-test>
    <div id="testdemo"></div>
  </div>
</template>
<script>
import btest from '../components/b-test.vue'
export default {
  components:{
      'b-test':btest
  },
}
</script>


b-test组件下有c-mask[弹窗组件]组件


<template>
  <div class="b-test">
    我是b-test组件
    <c-mask></c-mask>
  </div>
</template>
<script>
import cmask  from "./c-mask.vue"
export default {
  components:{
      'c-mask':cmask
  },
}
</script>


c-mask[弹窗组件]组件移动到body下


<template>
  <div>
    <a-button type="primary" @click="openHander">open</a-button>
    <!-- 将内容区域的代码移动到body下 -->
    <teleport to='body'>
      <div class="mask" v-if="showFlag">
        <h1>对话框组件</h1>
        <div>
            我是内容哈哈
        </div>
        <a-button  @click="openHander">关闭</a-button>
      </div>
    </teleport>
  </div>
</template>
<script>
import { ref } from '@vue/reactivity'
export default {
    setup () {
        let showFlag=ref(false)
        const openHander=()=>{
            showFlag.value=!showFlag.value
        }
        return {showFlag,openHander}
    }
}
</script>



1425695-20211101215751444-454280077.gif


主要注意的地方


通过上面的小粒子,想必你已经看明白了。


需要注意的是不可以移动到#app之内


我们可以在index.html中创建id=myapp的容器


将它传送在myapp容器下,我们看一下


index.html 创建一个容器


<body>
    <div id="app"></div>
    //等会将会传送到这里哈
    <div id="myapp"></div>
  </body>


传送


<template>
  <div>
    <a-button type="primary" @click="openHander">open</a-button>
    <!-- 将内容区域的代码移动到id=myapp下 -->
    <teleport to='#myapp'>
        <div class="mask" v-if="showFlag">
            <h1>对话框组件</h1>
            <div>
                我是内容哈哈
            </div>
            <a-button  @click="openHander">关闭</a-button>
        </div>
    </teleport>
  </div>
</template>
<script>
import { ref } from '@vue/reactivity'
export default {
  setup () {
    let showFlag=ref(false)
    const openHander=()=>{
        showFlag.value=!showFlag.value
    }
    return {showFlag,openHander}
  }
}
</script>


1425695-20211101220847561-920671450.png

相关文章
|
15天前
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
395 139
|
10天前
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
103 1
|
2月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
268 11
|
25天前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
169 0
|
3月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
361 1
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
232 2
|
12天前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
221 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
663 0
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
671 77