詳解Vue3中Teleport的使用
在本文中,我們將介紹:
- Teleport 的目的
- Teleport 的例子
- 一些很有意思的代碼交互
Teleport 的目的
首先是什么時(shí)候以及使用這個(gè) Teleport 功能。
在開發(fā)較大的 Vue 項(xiàng)目時(shí)應(yīng)該以可重用的邏輯去組織代碼。但是當(dāng)處理某些類型的組件(如模式、通知或工具提示)時(shí),模板 HTML 的邏輯可能不會(huì)和我們希望渲染元素處于相同的文件中。
實(shí)際上在大多數(shù)情況下,與 Vue 的 DOM 完全分開處理相比,處理這些元素要容易得多。因?yàn)榍短捉M件的位置、z-index 和樣式等這些東西,可能由于需要處理其所有父對(duì)象的作用域而變得棘手。
而這些正是 Teleport 的用武之地。我們可以在邏輯所在的組件中編寫模板代碼,因?yàn)檫@樣我們可以使用組件的數(shù)據(jù)或 props。
如果不用 Teleport,我們還必須擔(dān)心事件傳播會(huì)把邏輯從子組件傳遞給 DOM 樹。
Teleport 是怎樣工作的
假設(shè)有一些子組件,我們想在其中觸發(fā)彈出的通知。正如剛剛討論的那樣,如果將通知以完全獨(dú)立的 DOM 樹渲染,而不是 Vue 的根 #app 元素,會(huì)更加簡單。
首先編輯 index.html 并在 </body> 之前添加一個(gè) <div>。
//index.html <body> <div id="app"></div> <div id='portal-target'></div> </body>
接下來創(chuàng)建觸發(fā)渲染通知的組件。
//VuePortals.vue
<template>
<div class='portals'>
<button @click='showNotification'> Trigger Notification! </button>
<teleport to='#portal-target'>
<div class='notification'>
This is rendering outside of this child component!
</div>
</teleport>
</div>
</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>
在這代碼段中,按下按鈕時(shí),將渲染通知 2 秒鐘。但是我們的主要目標(biāo)是用 Teleport 獲取通知并在 VUE 程序外部渲染。
如你所見,Teleport 有一個(gè)必填屬性:to
to 屬性使用有效的 DOM 查詢字符串,它可以是:
- 元素的 ID
- 元素的類
- 數(shù)據(jù)選擇器
- 響應(yīng)查詢字符串
由于我們?cè)?#portal-target 中傳遞了代碼,所以 Vue 程序?qū)⒄业轿覀儼?index.html 中的 #portal-target div,它會(huì)傳送門戶中的所有代碼并將其渲染在該 div 中。
下面是結(jié)果:

檢查元素并查看 DOM,可以很清楚地了解都發(fā)生了什么。

我們可以使用 VuePortals 組建中的所有邏輯,但是需要告訴我們的項(xiàng)目渲染在其他地方的哪個(gè)模板代碼。
以上就是詳解Vue3中的Teleport的詳細(xì)內(nèi)容,更多關(guān)于Vue3 中的Teleport的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
創(chuàng)建nuxt.js項(xiàng)目流程圖解
Nuxt.js是創(chuàng)建Universal Vue.js應(yīng)用程序的框架。它的主要范圍是UI渲染,同時(shí)抽象出客戶端/服務(wù)器分布。我們的目標(biāo)是創(chuàng)建一個(gè)足夠靈活的框架,以便您可以將其用作主項(xiàng)目庫或基于Node.js的當(dāng)前項(xiàng)目。2020-03-03
Vue build過程取消console debugger控制臺(tái)信息輸出方法詳解
這篇文章主要為大家介紹了Vue build過程取消console debugger控制臺(tái)信息輸出方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Vue3解析markdown并實(shí)現(xiàn)代碼高亮顯示的詳細(xì)步驟
Vue的markdown解析庫有很多,如markdown-it、vue-markdown-loader、marked、vue-markdown等,這篇文章主要介紹了Vue3解析markdown并實(shí)現(xiàn)代碼高亮顯示,需要的朋友可以參考下2022-07-07
vue中的data為什么是個(gè)函數(shù)而不是對(duì)象詳解
這篇文章主要介紹了vue中的data為什么是個(gè)函數(shù)而不是對(duì)象問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
vue axios 在頁面切換時(shí)中斷請(qǐng)求方法 ajax
下面小編就為大家分享一篇vue axios 在頁面切換時(shí)中斷請(qǐng)求方法 ajax,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03

