自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

極速上手 Vue 3—Teleport傳送門組件

開發(fā) 前端
teleport 傳送門組件,提供一種簡(jiǎn)潔的方式,可以指定它里面的內(nèi)容的父元素。通俗易懂地講,就是 teleport 中的內(nèi)容允許我們控制在任意的 DOM 中,使用簡(jiǎn)單。

[[431959]]

一、teleport 介紹

teleport 傳送門組件,提供一種簡(jiǎn)潔的方式,可以指定它里面的內(nèi)容的父元素。通俗易懂地講,就是 teleport 中的內(nèi)容允許我們控制在任意的 DOM 中,使用簡(jiǎn)單。

使用語法:

  1. <teleport to="body"
  2.  <div> 
  3.   需要?jiǎng)?chuàng)建的內(nèi)容 
  4.  </div>   
  5. </teleport> 

to 屬性是指定 teleport 中的內(nèi)容加入的 DOM 元素。可以是標(biāo)簽名,也可以是 id 或類名。

  1. //標(biāo)簽名  。上述實(shí)例就是加入body元素內(nèi),使用的是標(biāo)簽名。 
  2. <teleport to="body"></teleport> 
  3.  
  4. //類名。如:to=".className" 
  5. <teleport to=".className"></teleport> 
  6.  
  7. //id名 
  8. <teleport to="#idName"></teleport> 

 

1.1、多個(gè) teleport 使用

多個(gè) teleport 傳送門組件可以將內(nèi)容都掛載到一個(gè)目標(biāo)上,多個(gè) teleport 組件內(nèi)容就是兄弟節(jié)點(diǎn),先掛載的在前面,后掛載的在后面。

使用如下:

  1. <teleport to="body"
  2.  <div class="first"
  3.   第一個(gè)掛載元素 
  4.  </div>   
  5. </teleport> 
  6. <teleport to="body"
  7.  <div class="second"
  8.   第二個(gè)掛載元素 
  9.  </div>   
  10. </teleport> 

運(yùn)行結(jié)果如圖:

極速上手 VUE 3——teleport傳送門組件

上邊的實(shí)例等價(jià)于:

  1. <teleport to="body"
  2.  <div class="first"
  3.   第一個(gè)掛載元素 
  4.  </div> 
  5.  <div class="second"
  6.   第二個(gè)掛載元素 
  7.  </div> 
  8. </teleport> 

二、為什么使用 teleport

使用 vue 開發(fā)時(shí),都是多個(gè)組件之間不斷地嵌套,處理元素的樣式或者層級(jí)的時(shí)候就會(huì)變得困難。如我們需要添加一個(gè) modal 模態(tài)框或 toast 提示框,如果我們把這樣的框可以從 vue 組件中剝離出來,我們樣式和層級(jí)設(shè)置起來會(huì)更加簡(jiǎn)便。

有些同學(xué)會(huì)想,這直接放到 index.html 中不就好了嗎?另外 modal 、toast 元素需要使用 vue 組件的狀態(tài)值,通過狀態(tài)控制 modal、toast 的隱藏顯示。如果直接放入 index.html 則狀態(tài)控制就復(fù)雜了。

所以 teleport 傳送門組件就派上用場(chǎng)了。有點(diǎn)像“哆啦A夢(mèng)”的任意門,可以把元素傳送到任意的元素內(nèi)。同時(shí)還可以使用 vue 組件內(nèi)的狀態(tài)值控制它。

三、teleport 應(yīng)用

使用 vite + vue 3 創(chuàng)建的項(xiàng)目,具體如何創(chuàng)建項(xiàng)目請(qǐng)查看《什么,你還使用 webpack?別人都在用 vite 搭建項(xiàng)目了》文章。

vue 3 的項(xiàng)目創(chuàng)建完成之后,找到 index.htm 文件,添加:

  1. <div id="newModal"></div> 

組件文件內(nèi),添加 teleport 組件:

  1. <button @click="showModal" class="btn">打開 modal </button> 
  2. <!-- to 屬性就是目標(biāo)位置 --> 
  3. <teleport to="#newModal"
  4.  <div v-if="visible"
  5.   <div >我是一個(gè) Modal 框</div> 
  6.   </div> 
  7. </teleport> 

運(yùn)行結(jié)果,我們發(fā)現(xiàn)使用的 teleport 組件,通過 to 屬性,將內(nèi)容傳送到<div id="newModal"></div>內(nèi),該元素與<div id="app"></div>同級(jí)。此時(shí) teleport 中的元素隱藏顯示完全由 vue 組件內(nèi)的狀態(tài)值決定。

四、初學(xué)者容易遇到的坑

有些同學(xué)在自己的項(xiàng)目?jī)?nèi),直接引入了 teleport 傳送門組件,運(yùn)行以后發(fā)現(xiàn)該組件原樣輸出了,并沒有被解析,同時(shí)還會(huì)報(bào)錯(cuò)。

錯(cuò)誤信息如下:

極速上手 VUE 3——teleport傳送門組件

vue.runtime.esm.js?2b0e:619 [Vue warn]: Unknown custom element: <teleport> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

然后就在網(wǎng)上各種查解決辦法,最后發(fā)現(xiàn)壓根找不到!

根本原因是你使用的還是 vue2,不是 vue3。有些同學(xué)會(huì)把 腳手架 vue-cli 3 創(chuàng)建的項(xiàng)目,當(dāng)作是 vue3 。vue-cli 2 和 vue-cli 3 創(chuàng)建項(xiàng)目與是否是 vue3 沒有必然聯(lián)系的。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2012-03-11 15:20:36

Android

2020-12-01 08:34:31

Vue3組件實(shí)踐

2023-08-28 00:24:59

圖像場(chǎng)景

2024-10-24 09:18:45

2017-07-28 15:57:57

小米

2024-01-08 00:25:43

AI微軟PC

2022-08-10 10:00:58

AR傳送門

2023-11-29 09:05:59

Vue 3場(chǎng)景

2023-05-22 09:11:00

AI

2021-03-31 08:01:50

Vue3 Vue2 Vue3 Telepo

2021-05-12 10:25:29

開發(fā)技能代碼

2021-11-15 08:16:05

Vue 技巧 開發(fā)工具

2020-10-25 18:43:20

VueTypeScript前端

2021-09-29 11:33:19

異步組件Vue 3

2020-11-06 08:54:43

Vue 3.0函數(shù)代碼

2022-06-21 12:09:18

Vue差異

2024-01-09 08:34:56

Vue3.js組件通信

2021-05-18 07:51:37

Suspense組件Vue3

2022-07-29 11:03:47

VueUni-app
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)