vue3中解決組件間 css 層級問題最佳實踐(Teleport的使用)

定義:

<Teleport>?是 Vue 3 中引入的一個內置組件,用于將組件的內容渲染到 DOM 中的指定位置,而不受組件層級結構的限制。這在處理模態框、通知、下拉菜單等需要脫離當前組件層級的情況下非常有用。

通俗來說,Teleport的功能是將當前組件掛載到應用的頂層,與App組件同級。這樣做的原因是,如果一個組件嵌套在Vue應用的內部,處理這個組件的定位、z-index以及樣式會變得相當棘手。通過使用Teleport,可以輕松解決組件之間的CSS層級問題,使得樣式管理更加簡便有效。這種方式不僅簡化了布局設計,還避免了因層級嵌套帶來的樣式沖突或覆蓋問題。

使用:

   <Teleport to="body"><add-dialog>這是一個需要改變層級的彈窗</add-dialog></Teleport>

<Teleport>?組件包含兩個主要的屬性:

  1. to: 指定目標容器,可以是一個 CSS 選擇器字符串或一個 DOM 元素。

  2. disabled: 可選屬性,用于控制是否禁用?Teleport。如果為?true,內容將不會被傳送到目標容器,而是在原地渲染。

多個teleport還可以掛載到同一個元素下?

<Teleport to="body"><add-dialog>這是第一個需要改變層級的彈窗</add-dialog>
</Teleport>
<Teleport to="body"><user-dialog>這是第二個需要改變層級的彈窗</user-dialog>
</Teleport>

多個 <Teleport> 組件可以將其內容依次掛載到同一個目標元素上,按照先后順序追加,后掛載的內容將放置于目標元素下的更靠后位置。

總結:

<Teleport>?是 Vue 3 中一個非常強大的工具,特別適合處理那些需要脫離當前組件層級的 UI 元素。通過?Teleport,你可以更靈活地控制組件的渲染位置,而不必擔心 DOM 結構的限制。

拓展:

vue3中新增了哪些新的內置組件和特性?

Vue 3 引入了一些新的內置組件和特性,但并沒有新增大量的 HTML 標簽。Vue 3 的核心仍然是基于現有的 HTML 標簽和自定義組件。以下是 Vue 3 中新增的主要內置組件和特性:

1.?<Teleport>

  • 作用: 將組件的內容渲染到 DOM 中的指定位置,而不受組件層級結構的限制。

  • 使用場景: 模態框、通知、下拉菜單等需要脫離當前組件層級的情況。

  • 示例:

<Teleport to="body"><div class="modal">這是一個模態框</div>
</Teleport>

2.?<Suspense>

  • 作用: 用于處理異步組件的加載狀態,提供 fallback 內容(如加載動畫)直到異步組件加載完成。

  • 使用場景: 異步組件、異步數據加載等。

  • 示例:

<Suspense><template #default><AsyncComponent /></template><template #fallback><div>加載中...</div></template>
</Suspense>

3.?<Fragment>

  • 作用: Vue 3 默認支持多根節點組件(Fragment),不再需要包裹一個單獨的根元素。

  • 使用場景: 簡化模板結構,避免不必要的包裹元素。

  • 示例:

<template><div>第一個元素</div><div>第二個元素</div>
</template>

4.?v-model?的增強

  • Vue 3 對?v-model?進行了改進,支持多個?v-model?綁定,并且可以自定義修飾符。

  • 示例:

<ChildComponent v-model:title="pageTitle" v-model:content="pageContent" />

5.?<script setup>?語法糖

  • 作用: 簡化 Composition API 的使用,使代碼更簡潔。

  • 使用場景: 單文件組件(SFC)中使用 Composition API。

  • 示例:

<script setup>
import { ref } from 'vue';
const count = ref(0);
</script><template><button @click="count++">{{ count }}</button>
</template>

6.?<style scoped>?的改進

  • Vue 3 支持在?<style scoped>?中使用深度選擇器?:deep(),用于樣式穿透。

  • 示例:

<style scoped>
.parent :deep(.child) {color: red;
}
</style>

7.?<Transition>?和?<TransitionGroup>?的改進

  • Vue 3 對過渡動畫組件進行了優化,支持更多的動畫場景和配置。

  • 示例:

<Transition name="fade"><div v-if="show">內容</div>
</Transition>

8.?<KeepAlive>?的改進

  • Vue 3 對?<KeepAlive>?組件進行了增強,支持更細粒度的緩存控制。

  • 示例:

<KeepAlive :include="['ComponentA', 'ComponentB']"><component :is="currentComponent" />
</KeepAlive>

9.?<component>?的改進

  • Vue 3 中?<component>?支持動態組件切換,并且可以結合?v-model?使用。

  • 示例:

<component :is="currentComponent" v-model="data" />

10.?v-bind?的 CSS 變量支持

  • Vue 3 允許在?<style>?中使用?v-bind?綁定組件的響應式數據。

  • 示例:

<template><div class="text">Hello</div>
</template><script setup>
import { ref } from 'vue';
const color = ref('red');
</script><style scoped>
.text {color: v-bind(color);
}
</style>

總結

Vue 3 并沒有新增大量的 HTML 標簽,而是通過引入新的內置組件(如?<Teleport>?和?<Suspense>)以及對現有特性的增強(如?v-model<script setup>?等)來提升開發體驗和功能靈活性。這些新特性使得 Vue 3 更加強大和現代化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70489.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

密度提升30%!Intel 18A工藝正式開放代工

快科技2月23日消息&#xff0c;Intel官方網站悄然更新了對于18A(1.8nm級)工藝節點的描述&#xff0c;稱已經做好了迎接客戶項目的準備&#xff0c;將在今年上半年開始流片&#xff0c;有需求的客戶可以隨時聯系。 Intel宣稱&#xff0c;這是在北美地區率先量產的2nm以下工藝節…

docker中常用的命令

一、服務命令 systemctl start docker.service 啟動docker服務 systemctl stop docker.service 關閉docker服務 systemctl enable docker.service 設置docker服務開機啟動 systemctl disable docker.service .禁止docker服務開機自啟動 二、鏡像命令 d…

架構師論文《智慧醫療系統中的數據集成與共享》

智慧醫療系統中的數據集成與共享 摘要 隨著醫療信息化的發展&#xff0c;如何實現跨系統、跨機構的數據集成與共享成為智慧醫療建設的核心問題。2019年&#xff0c;我所在的醫療科技公司承接了某省衛生健康委員會主導的“區域醫療信息化平臺”項目。該平臺旨在整合區域內三甲醫…

請求go構建緩存,go clean -cache

go clean -cache go 構建時會產生很多緩存&#xff0c; 一般是目錄&#xff1a;/Users/xxx/Library/Caches/go-build 此目錄README&#xff1a; This directory holds cached build artifacts from the Go build system. Run "go clean -cache" if the directory …

mybatis從接口直接跳到xml的插件

在使用 MyBatis(包括 MyBatis-Plus)時,如果你希望從接口方法直接跳轉到對應的 XML 映射文件中的 SQL 語句定義,可以借助一些開發工具或插件來實現這一功能。以下是幾種常見的方法和插件推薦: 方法一:使用 IDE 內置功能 IntelliJ IDEA IntelliJ IDEA 提供了對 MyBatis …

計算機視覺行業洞察--影像行業系列第一期

計算機視覺行業產業鏈的上下游構成相對清晰&#xff0c;從基礎技術研發到具體應用場景的多個環節相對成熟。 以下是我結合VisionChina經歷和行業龍頭企業對計算機視覺行業產業鏈上下游的拆解總結。 上下游總結 上游產業鏈分為軟硬件兩類&#xff0c;視覺的硬件主要指芯片、…

Spring事務原理 二

在上一篇博文《Spring事務原理 一》中&#xff0c;我們熟悉了Spring聲明式事務的AOP原理&#xff0c;以及事務執行的大體流程。 本文中&#xff0c;介紹了Spring事務的核心組件、傳播行為的源碼實現。下一篇中&#xff0c;我們將結合案例&#xff0c;來講解實戰中有關事務的易…

邏輯函數的神經網絡實現

1.單層感知器實現基本邏輯函數 先給大家拋出一道例題 &#xff08;一&#xff09;種類 a.OR函數 目標&#xff1a;當至少一個輸入為1時&#xff0c;輸出1&#xff1b;否則輸出0。 權重設置&#xff1a; 輸入權重&#xff1a;所有 wi1&#xff08;i1,2,...,m&#xff09;。…

SF-HCI-SAP問題收集1

最近在做HCI的集成&#xff0c;是S4的環境&#xff0c;發現很多東西都跑不通&#xff0c;今天開始收集一下錯誤點 如果下圖沖從0001變成0010&#xff0c;sfiom_rprq_osi表就會存數據&#xff0c;系統檢查到此表就會報錯&#xff0c;這個選項的作用就是自定義信息類型也能更新&a…

(面試經典問題之分布式鎖)分布式鎖的基本原理、作用以及實現

一、什么是分布式鎖 分布式鎖指的是在分布式場景中實現互斥類型的鎖。 分布式是什么意思&#xff1f;分布式表示運行的節點可能在不同的機器或不同的網段中&#xff0c;節點間通信通過socket。互斥類型是什么意思&#xff1f;互斥類型表示同一時刻只允許一個執行體進入臨界資…

機械硬盤與固態硬盤的區別-機械硬盤的未來在哪里?

隨著近年來固態硬盤的技術成熟和成本的下探&#xff0c;固態硬盤&#xff08;SSD&#xff09;儼然有要取代傳統機械硬盤&#xff08;HDD&#xff09;的趨勢&#xff0c;但目前單位容量下機械硬盤每GB價格相比閃存還有5-7倍的優勢&#xff0c;那么機械硬盤是否已經發展到極限&am…

06排序 + 查找(D1_排序(D1_基礎學習))

目錄 學習預熱&#xff1a;基礎知識 一、什么是排序 二、為什么要排序 三、排序的穩定性 四、排序穩定性的意義 五、排序分類方式 方式一&#xff1a;內外分類 方式二&#xff1a;比較分類 六、排序算法性能評估 1. 算法的時間復雜度 2. 算法的空間復雜度 七、知識小…

簡訊:Rust 2024 edition and v1.85.0 已發布

詳見 https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html 升級方法&#xff1a;rustup update stable

Python 錯誤和異常處理

目錄 try-except塊 例子&#xff1a; 輸出&#xff1a; 捕獲多種異常 例子&#xff1a; else和finally 例子&#xff1a; 輸出&#xff1a; 自定義異常 例子&#xff1a; 輸出&#xff1a; 好的&#xff0c;簡單來說&#xff0c;錯誤和異常處理是編程中用來處理程序…

Linux系統使用Docker部署Geoserver并做數據掛載進行地圖服務的發布和游覽

文章目錄 1、前提環境2、拉取geoserver鏡像3、創建數據掛載目錄4、 運行容器5、 測試使用&#xff08;發布shp數據為服務&#xff09;5.1、創建工作區5.2、添加數據存儲5.3、發布圖層5.4、服務游覽 1、前提環境 部署環境&#xff1a;Linux&#xff0c;Centos7 &#xff0c;Doc…

Innovus中快速獲取timing path邏輯深度的golden腳本

在實際項目中我們經常會遇到一條timing path級數特別多&#xff0c;可能是一兩頁都翻不完。此時&#xff0c;我們大都需要手工去數這條path上到底有哪些是設計本身的邏輯&#xff0c;哪些是PR工具插入的buffer和inverter。 數字IC后端手把手培訓教程 | Clock Gating相關clock …

Python爬蟲實戰:從零到一構建數據采集系統

文章目錄 前言一、準備工作1.1 環境配置1.2 選擇目標網站 二、爬蟲實現步驟2.1 獲取網頁內容2.2 解析HTML2.3 數據保存 三、完整代碼示例四、優化與擴展4.1 反爬應對策略4.2 動態頁面處理4.3 數據可視化擴展 五、注意事項六、總結互動環節 前言 在大數據時代&#xff0c;數據采…

SpringBoot中實現限流和熔斷功能

我們將使用Java的ScheduledExecutorService來實現一個簡單的令牌桶算法(Token Bucket Algorithm),并結合一個自定義的服務類來處理第三方API調用。 1. 創建限流器 首先,創建一個簡單的限流器類: import java.util.concurrent.*;public class SimpleRateLimiter {

如何使用Python快速開發一個帶管理系統界面的網站-解析方案

如果你想用 Python 開發一個 管理系統界面 的網站&#xff0c;并且希望界面美觀&#xff0c;可以考慮以下幾個框架和庫&#xff1a; 1. Streamlit&#xff08;快速、簡潔&#xff09; 適合&#xff1a;數據分析、儀表盤、內部管理系統特點&#xff1a; 寫法簡單&#xff0c;類…

Git常見命令--助力開發

git常見命令&#xff1a; 創建初始化倉庫&#xff1a; git 將文件提交到暫存區 git add 文件名 將文件提交到工作區 git commit -m "注釋&#xff08;例如這是發行的版本1&#xff09;" 文件名 查看狀態 如果暫存區沒有文件被提交顯示&#xff1a; $ git status On…