您好,登錄后才能下訂單哦!
Vue3中teleport新特性的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Vue鼓勵我們通過將UI和相關行為封裝到組件中來構建UI。我們可以將它們嵌套在另一個內部,來構建一個組成應用程序UI樹。
然而,有時組件模板的一部分邏輯上屬于該組件,而從技術角度來看,最好將模板的這一部分移動到DOM中Vue app之外的其他位置。
Teleport提供了一種干凈的方法,允許我們控制在DOM中哪個父節點下渲染HTML,而不必求助于全局狀態或將其拆分為兩個組件。
app.component('modal-button', { template: ` <button @click="modalOpen = true"> Open full screen modal! (With teleport!) </button> <teleport to="body"> <div v-if="modalOpen" class="modal"> <div> I'm a teleported modal! (My parent is "body") <button @click="modalOpen = false"> Close </button> </div> </div> </teleport> `, data() { return { modalOpen: false } } })
與Vue compoents一起使用
如果<teleport>包含Vue組件,則它仍將是<teleport>父組件的邏輯子組件:
const app = Vue.createApp({ template: ` <h2>Root instance</h2> <parent-component /> ` }) app.component('parent-component', { template: ` <h3>This is a parent component</h3> <teleport to="#endofbody"> <child-component name="John" /> </teleport> ` }) app.component('child-component', { props: ['name'], template: ` <div>Hello, {{ name }}</div> ` })
在這種情況下,即使在不同地方渲染child-compoents,它仍將是parent-component的子集,并將從中接受name prop。
這也意味著來自父組件的注入按預期工作,并且子組件將嵌套在Vue Devtools中的父組件之下,部署放在實際內容移動到的位置。
在同一目標上使用多個teleport
一個常見的用例場景是一個可重用的<Modal>組件,他可能同時有多個實例處于活動狀態。對于這種情況,多個<teleport>組件可以將其內容掛載到同一個目標元素。順序將是一個簡單的追加——稍后掛載將位于目標元素中較早的掛載之后。
<teleport to="#modals"> <div>A</div> </teleport> <teleport to="#modals"> <div>B</div> </teleport> <!-- result--> <div id="modals"> <div>A</div> <div>B</div> </div>
to:String。需要prop,必須是有效的查詢選擇器或HTMLElement(如果在瀏覽器環境中使用)。指定將在其移動<teleport>內容的目標元素。
<!-- 正確 --> <teleport to="#some-id" /> <teleport to=".some-class" /> <teleport to="[data-teleport]" /> <!-- 錯誤 --> <teleport to="h2" /> <teleport to="some-string" />
disabled: boolean。此可選屬性可用于禁用<teleport>的功能,這意味著其插槽內容不會移動到任何位置。而是在您在周圍父組件中指定了<teleport>的位置渲染。
<teleport to="#popup" :disabled="displayVideoInline"> <video src="./my-movie.mp4"> </teleport>
值得注意的是,這將移動實際的DOM節點,而不是被銷毀和重新創建,而且它還將保持
任何組件實例的活動狀態。所有有狀態的HTML元素(即播放的視頻)都將保持其狀態。
關于Vue3中teleport新特性的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。