1. 程式人生 > 程式設計 >詳解Vue3中Teleport的使用

詳解Vue3中Teleport的使用

在本文中,我們將介紹:

  • Teleport 的目的
  • Teleport 的例子
  • 一些很有意思的程式碼互動

Teleport 的目的

首先是什麼時候以及使用這個 Teleport 功能。

在開發較大的 vue 專案時應該以可重用的邏輯去組織程式碼。但是當處理某些型別的元件(如模式、通知或工具提示)時,模板 HTML 的邏輯可能不會和我們希望渲染元素處於相同的檔案中。

實際上在大多數情況下,與 Vue 的 DOM 完全分開處理相比,處理這些元素要容易得多。因為巢狀元件的位置、z-index 和樣式等這些東西,可能由於需要處理其所有父物件的作用域而變得棘手。

而這些正是 Teleport 的用武之地。我們可以在邏輯所在的元件中編寫模板程式碼,因為這樣我們可以使用元件的資料或 props。

如果不用 Teleport,我們還必須擔心事件傳播會把邏輯從子元件傳遞給 DOM 樹。

Teleport 是怎樣工作的

假設有一些子元件,我們想在其中觸發彈出的通知。正如剛剛討論的那樣,如果將通知以完全獨立的 DOM 樹渲染,而不是 Vue 的根 #app 元素,會更加簡單。

首先編輯 index.html 並在 </body> 之前新增一個 <div>。

//index.html
<body程式設計客棧>
<divid="app"></div>
<divid='portal-target'></div>
</body>

接下來建立觸發渲染通知的元件。

//VuePortals.vue
<template>
<divclass='portals'>
<button@click='showNotification'>TriggerNotification!&nbshttp://www.cppcns.comp;</button>
<teleportto='#portal-target'>
<divclass='notification'>
Thisisrenderingoutsideofthischildcomponent!
</div>
</teleport>
</div>
</template>

<script>
import{ref}from'vue'
exportdefault{
setup(){
constisOpen=ref(false)

varclosePopup

constshowNotification=()=>{
isOpen.value=true

clearTimeout(closePopup)

closePopup=setTimeout(()=>{
isOpen.value=false
},2000)
}

return{
isOpen,showNotification
}
}
}
</script>

<stylescoped>
.notification{
font-family:myriad-pro,sans-serif;
position:fixed;
bottom:20px;
left:20px;
width:300px;
padding:30px;
background-color:#f
程式設計客棧
ff; } </style>

在這程式碼段中,按下按鈕時,將渲染通知 2 秒鐘。但是我們的主要目標是用 Teleport 獲取通知並在 VUE 程式外部渲染。

如你所見,Teleport 有一個必填屬性:to

to 屬性使用有效的 www.cppcns.comDOM 查詢字串,它可以是:

  • 元素的 ID
  • 元素的類
  • 資料選擇器
  • 響應查詢字串

由於我們在 #portal-target 中傳遞了程式碼,所以 Vue 程式將找到我們包含在程式設計客棧 index.html 中的 #portal-target div,它會傳送門戶中的所有程式碼並將其渲染在該 div 中。

下面是結果:

詳解Vue3中Teleport的使用

檢查元素並檢視 DOM,可以很清楚地瞭解都發生了什麼。

詳解Vue3中Teleport的使用

我們可以使用 VuePortals 組建中的所有邏輯,但是需要告訴我們的專案渲染在其他地方的哪個模板程式碼。

以上就是詳解Vue3中的Teleport的詳細內容,更多關於Vue3 中的Teleport的資料請關注我們其它相關文章!