• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解Vue3中Teleport的使用

vue 搞代码 4年前 (2022-01-08) 35次浏览 已收录 0个评论

门户(Portal)的概念是Vue3的新功能之一,也就是将模板 HTML 移至 DOM 的不同部分的方法。Portal 是 React 中的常见功能,Vue2 的 portal-vue 库也提供了相似的功能。在 Vue3 中用 Teleport 对这个概念提供了原生支持。本文将介绍Teleport的相关用法

在本文中,我们将介绍:

  • Teleport 的目的
  • Teleport 的例子
  • 一些很有意思的代码交互

Teleport 的目的

首先是什么时候以及使用这个 Teleport 功能。

在开发较大的 Vue 项目时应该以可重用的逻辑去组织代码。但是当处理某些类型的组件(如模式、通知或工具提示)时,模板 HTML 的逻辑可能不会和我们希望渲染元素处于相同的文件中。

实际上在大多数情况下,与 Vue 的 DOM 完全分开处理相比,处理这些元素要容易得多。因为嵌套组件的位置、z-index 和样式等这些东西,可能由于需要处理其所有父对象的作用域而变得棘手。

而这些正是 Teleport 的用武之地。我们可以在逻辑所在的组件中编写模板代码,因为这样我们可以使用组件的数据或 props。

如果不用 Teleport,我们还必须担心事件传播会把逻辑从子组件传递给 DOM 树。

Teleport 是怎样工作的

假设有一些子组件,我们想在其中触发弹出的通知。正如刚刚讨论的那样,如果将通知以完全独立的 DOM 树渲染,而不是 Vue 的根 #app 元素,会更加简单。

首先编辑 index.html 并在

之前添加一个

 //index.html     <div></div>    <div></div>

接下来创建触发渲染通知的组件。

 //VuePortals.vue    <div>     <button> Trigger Notification! </button>            <div>         This is rendering outside of this child component!       </div>        </div>   .notification {     font-family: myriad-pro, sans-serif;     position: fixed;     bottom: 20px;     left: 20px;     width: 300px;     padding: 30px;     background-color<mark style="color:transparent">本文来源gaodaimacom搞#^代%!码网@</mark>: #fff;   } 

在这代码段中,按下按钮时,将渲染通知 2 秒钟。但是我们的主要目标是用 Teleport 获取通知并在 VUE 程序外部渲染。

如你所见,Teleport 有一个必填属性:to

to 属性使用有效的 DOM 查询字符串,它可以是:

  • 元素的 ID
  • 元素的类
  • 数据选择器
  • 响应查询字符串

由于我们在 #portal-target 中传递了代码,所以 Vue 程序将找到我们包含在 index.html 中的 #portal-target div,它会传送门户中的所有代码并将其渲染在该 div 中。

下面是结果:

检查元素并查看 DOM,可以很清楚地了解都发生了什么。

我们可以使用 VuePortals 组建中的所有逻辑,但是需要告诉我们的项目渲染在其他地方的哪个模板代码。

以上就是详解Vue3中Teleport的使用的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解Vue3中Teleport的使用

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址