新聞中心
Vue 鼓勵我們通過將 UI 和相關行為封裝到組件中來構建 UI。我們可以將它們嵌套在另一個內部,以構建一個組成應用程序 UI 的樹。

我們提供的服務有:成都網站設計、做網站、微信公眾號開發(fā)、網站優(yōu)化、網站認證、涪城ssl等。為上千家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的涪城網站制作公司
然而,有時組件模板的一部分邏輯上屬于該組件,而從技術角度來看,最好將模板的這一部分移動到 DOM 中 Vue app 之外的其他位置。
一個常見的場景是創(chuàng)建一個包含全屏模式的組件。在大多數情況下,你希望模態(tài)框的邏輯存在于組件中,但是模態(tài)框的快速定位就很難通過 CSS 來解決,或者需要更改組件組合。
考慮下面的 HTML 結構。
Tooltips with Vue 3 Teleport
讓我們來看看 modal-button 組件:
該組件將有一個 button 元素來觸發(fā)模態(tài)的打開,以及一個具有類 .modal 的 div 元素,它將包含模態(tài)的內容和一個用于自關閉的按鈕。
const app = Vue.createApp({});
app.component('modal-button', {
template: `
I'm a modal!
`,
data() {
return {
modalOpen: false
}
}
}) 當在初始的 HTML 結構中使用這個組件時,我們可以看到一個問題——模態(tài)是在深度嵌套的 div 中渲染的,而模態(tài)的 position:absolute 以父級相對定位的 div 作為引用。
Teleport 提供了一種干凈的方法,允許我們控制在 DOM 中哪個父節(jié)點下呈現 HTML,而不必求助于全局狀態(tài)或將其拆分為兩個組件。
讓我們修改 modal-button 以使用 ,并告訴 Vue “Teleport 這個 HTML 到該‘body’標簽”。
app.component('modal-button', {
template: `
I'm a teleported modal!
(My parent is "body")
`,
data() {
return {
modalOpen: false
}
}
}) 因此,一旦我們單擊按鈕打開模式,Vue 將正確地將模態(tài)內容渲染為 body 標簽的子級。
點擊此處實現
#與 Vue components 一起使用
如果 包含 Vue 組件,則它仍將是 父組件的邏輯子組件:
const app = Vue.createApp({
template: `
Root instance
`
})
app.component('parent-component', {
template: `
This is a parent component
`
})
app.component('child-component', {
props: ['name'],
template: `
Hello, {{ name }}
`
}) 在這種情況下,即使在不同的地方渲染 child-component,它仍將是 parent-component 的子級,并將從中接收 name prop。
這也意味著來自父組件的注入按預期工作,并且子組件將嵌套在 Vue Devtools 中的父組件之下,而不是放在實際內容移動到的位置。
#在同一目標上使用多個 teleport
一個常見的用例場景是一個可重用的 組件,它可能同時有多個實例處于活動狀態(tài)。對于這種情況,多個 組件可以將其內容掛載到同一個目標元素。順序將是一個簡單的追加——稍后掛載將位于目標元素中較早的掛載之后。
A
B
A
B
你可以在 API 參考 查看 teleport 組件。
網站欄目:創(chuàng)新互聯VUE3教程:Vue3.0Teleport
當前地址:http://fisionsoft.com.cn/article/dpihogd.html


咨詢
建站咨詢
