详解Vue3中Teleport的使用(详解Vue3中Teleport的使用)
详解Vue3中Teleport的使用
详解Vue3中Teleport的使用目录
- Teleport 的目的
- Teleport 是怎样工作的
在本文中,我们将介绍:
- Teleport 的目的
- Teleport 的例子
- 一些很有意思的代码交互
首先是什么时候以及使用这个 Teleport 功能。
在开发较大的 Vue 项目时应该以可重用的逻辑去组织代码。但是当处理某些类型的组件(如模式、通知或工具提示)时,模板 HTML 的逻辑可能不会和我们希望渲染元素处于相同的文件中。
实际上在大多数情况下,与 Vue 的 DOM 完全分开处理相比,处理这些元素要容易得多。因为嵌套组件的位置、z-index 和样式等这些东西,可能由于需要处理其所有父对象的作用域而变得棘手。
而这些正是 Teleport 的用武之地。我们可以在逻辑所在的组件中编写模板代码,因为这样我们可以使用组件的数据或 props。
如果不用 Teleport,我们还必须担心事件传播会把逻辑从子组件传递给 DOM 树。
Teleport 是怎样工作的假设有一些子组件,我们想在其中触发弹出的通知。正如刚刚讨论的那样,如果将通知以完全独立的 DOM 树渲染,而不是 Vue 的根 #app 元素,会更加简单。
首先编辑 index.html 并在 </body> 之前添加一个 <li>。
//index.html <body> <li id="app"></li> <li id='portal-target'></li> </body>
接下来创建触发渲染通知的组件。
//VuePortals.vue <template> <li class='portals'> <button @click='showNotification'> Trigger Notification! </button> <teleport to='#portal-target'> <li class='notification'> This is rendering outside of this child component! </li> </teleport> </li> </template> <script> import { ref } from 'vue' export default { setup () { const isOpen = ref(false) var closePopup const showNotification = () => { isOpen.value = true clearTimeout(closePopup) closePopup = setTimeout(() => { isOpen.value = false }, 2000) } return { isOpen, showNotification } } } </script> <style scoped> .notification { font-family: myriad-pro, sans-serif; position: fixed; bottom: 20px; left: 20px; width: 300px; padding: 30px; background-color: #fff; } </style>
在这代码段中,按下按钮时,将渲染通知 2 秒钟。但是我们的主要目标是用 Teleport 获取通知并在 VUE 程序外部渲染。
如你所见,Teleport 有一个必填属性:to
to 属性使用有效的 DOM 查询字符串,它可以是:
- 元素的 ID
- 元素的类
- 数据选择器
- 响应查询字符串
由于我们在 #portal-target 中传递了代码,所以 Vue 程序将找到我们包含在 index.html 中的 #portal-target li,它会传送门户中的所有代码并将其渲染在该 li 中。
下面是结果:
检查元素并查看 DOM,可以很清楚地了解都发生了什么。
我们可以使用 VuePortals 组建中的所有逻辑,但是需要告诉我们的项目渲染在其他地方的哪个模板代码。
以上就是详解Vue3中的Teleport的详细内容,更多关于Vue3 中的Teleport的资料请关注开心学习网其它相关文章!
- vue3.0 黑暗风格(Vue3.0 手写放大镜效果)
- vue中的ref(Vue3.0中Ref与Reactive的区别示例详析)
- vue将弹框抽离成组件(vue3 可拖动的左右面板分割组件实现)
- vue3函数详解(手把手教你用vue3开发一个打砖块小游戏)
- vue3兼容的插件多吗(关于vue3编写挂载DOM的插件问题)
- vue实现商品详情讲解(京东 Vue3 组件库支持小程序开发的详细流程)
- vue3 动态生成组件(如何在vue3.0+中使用tinymce及实现多图上传文件上传公式编辑功能)
- vue函数中的默认参数(Vue3中SetUp函数的参数props、context详解)
- vue3.0零基础入门(快速掌握Vue3.0中如何上手Vuex状态管理)
- vuex-table行列转换效果(vue3+el-table实现行列转换)
- vue3封装table组件(Vue封装通用table组件的完整步骤记录)
- vue3.0全家桶教程elementui学习(vite+vue3.0+ts+element-plus快速搭建项目的实现)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
- vue 路由的两种模式(Vue3使用路由VueRouter4的简单示例)
- vue2和vue3都如何创建项目(vue3.0+vite2实现动态异步组件懒加载)
- vue3 ref 的用法(Vue3中watchEffect的用途浅析)
- 为什么现在年轻人越来越喜欢买衣服(为什么现在年轻人越来越喜欢买衣服穿)
- 怎么做好SEO(怎么做好seo内容优化)
- 冬季钓鱼子线用 长 还是 短(冬季钓鱼子线用)
- 鱼竿 夏钓短,冬钓长 ,一定是这样 认清优缺点在选竿(鱼竿夏钓短冬钓长)
- 鲢鳙钓底还是钓浮 流水的水域应怎样做钓(鲢鳙钓底还是钓浮)
- 入秋后的第二场苹果发布会来了 全新M1系列芯片登场(入秋后的第二场苹果发布会来了)
热门推荐
- php模块使用方法(PHP操作XML中XPath的应用示例)
- mysql8.0安装教程win10(Windows10下mysql 8.0.22 安装配置方法图文教程)
- html中hr标签
- python 文件操作(Python File文件 方法整理)
- css高级使用技巧(全面解析CSS Media媒体查询使用操作推荐)
- docker怎么设置参数(浅谈docker --privileged=true参数作用)
- ASP.NET将Excel数据导入到数据库
- sqlserver 比较日期(解析SQL Server中SQL日期转换出错的原因)
- extjs card卡片式布局
- docker配置私有仓库(docker私有库的搭建实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9