Vue插槽---slot詳解

1、什么是 Vue 插槽?

????????Vue 插槽(Slot)?? 是 Vue 提供的一種非常強大且靈活的機制,用于實現:父組件向子組件傳遞一段模板內容(HTML / 組件等),讓子組件在指定位置動態渲染這些內容。

????????可以把插槽理解為:

  • 子組件定義了一個 ??“內容占位符”??
  • 父組件可以在使用子組件時,?往這個占位符里插入自定義內容

2、插槽的作用

????????在組件化開發中,常常封裝一些可復用的組件,比如:

  • Card(卡片)
  • Button(按鈕)
  • Modal(彈窗)
  • Layout(布局)

????????但這些組件內部某些部分的內容可能是不固定的,比如:

  • 卡片組件中的內容文本
  • 導航欄中的菜單項
  • 彈窗中的主體內容

????????這時候,如果寫死組件內部的 DOM 結構,會缺乏靈活性;

?插槽就是用來解決這種“內容動態化”的問題,讓組件更加靈活和可復用!?

3、插槽的基本使用(默認插槽)

? ? ? ? 1、子組件(帶插槽占位符)?ChildComponent.vue

<!-- ChildComponent.vue -->
<template><div class="card"><h3>這是一個卡片標題</h3><!-- 插槽占位符:父組件可以在這里插入任意內容 --><slot></slot></div>
</template><style scoped>
.card {border: 1px solid #ccc;padding: 20px;border-radius: 8px;
}
</style>

? ? ? ? 2、父組件(向子組件傳入內容)

<template><ChildComponent><!-- 這里的內容會被插入到子組件的 <slot> 位置 --><p>這是父組件傳入的內容,會顯示在子組件的插槽位置!</p></ChildComponent>
</template><script setup>
import ChildComponent from './ChildComponent.vue'
</script>

結果:

????????子組件中的?<slot></slot>?會被替換為父組件寫在?<ChildComponent>?標簽內部的 HTML 內容。

4、具名插槽(Named Slots)

????????當一個組件中有多個插槽位置時,我們需要給每個插槽起個名字,這就是具名插槽

? ? ? ? 1、子組件(定義多個具名插槽)BaseLayout.vue

<!-- BaseLayout.vue -->
<template><div class="layout"><header><!-- 具名插槽:header --><slot name="header"></slot></header><main><!-- 默認插槽(沒有名字的) --><slot></slot></main><footer><!-- 具名插槽:footer --><slot name="footer"></slot></footer></div>
</template>

? ? ? ? 2、父組件(向不同插槽傳入內容)

<template><BaseLayout><!-- 往 name="header" 的插槽傳內容 --><template #header><h1>這是頁面頭部</h1></template><!-- 默認插槽(沒有 name 的,直接寫內容也可以) --><p>這是頁面的主要內容區域</p><!-- 往 name="footer" 的插槽傳內容 --><template #footer><p>? 2025 我的網站</p></template></BaseLayout>
</template><script setup>
import BaseLayout from './BaseLayout.vue'
</script>

注意:**#header?是?<template v-slot:header>?的簡寫形式(Vue 2.6+ 推薦)?**?

????????Vue 2.6 之前寫法

<template slot="header"><h1>>這是頁面頭部</h1>
</template><template slot="footer"><p>? 2025 我的網站</p>
</template>

5、作用域插槽(Scoped Slots)

????????作用域插槽是一種更高級的插槽用法,允許子組件向父組件傳遞數據,讓父組件可以基于子組件的數據來渲染插槽內容。

????????舉例:

封裝了一個列表組件,列表的數據是由子組件管理的,但每一項的內容希望由父組件自定義

????????1、子組件(傳遞數據給插槽)UserList.vue

<!-- UserList.vue -->
<template><ul><li v-for="user in users" :key="user.id"><!-- 作用域插槽:將 user 數據傳遞給父組件 --><slot :user="user"></slot></li></ul>
</template><script setup>
import { ref } from 'vue'// 模擬數據
const users = ref([{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Charlie' }
])
</script>

? ? ? ? 2、父組件(使用子組件,并接收子組件傳遞的數據)

<template><UserList><!-- 使用 v-slot 或 # 接收子組件傳遞的 user 對象 --><template #default="slotProps"><span>{{ slotProps.user.name }}</span></template></UserList>
</template><script setup>
import UserList from './UserList.vue'
</script>

slotProps?是一個對象,包含子組件傳遞出來的所有數據(比如這里的?user

????????Vue 2.6+推薦的簡寫方式:這樣寫更簡潔,直接解構?user

<template><UserList><!-- 簡寫:#default="user" --><template #default="{ user }"><div>ID: {{ user.id }} - Name: {{ user.name }}</div></template></UserList>
</template>

????????或者給插槽起名字(比如叫?item):

????????子組件:

<slot name="item" :user="user"></slot>

????????父組件:

<template #item="{ user }"><div>{{ user.name }}</div>
</template>

6、推薦使用場景

場景推薦插槽類型
卡片、彈窗、布局組件的內容區域默認插槽
頁面頭部、導航、頁腳等分區具名插槽
列表項、表格單元格、下拉選項等需要自定義內容作用域插槽

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

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

相關文章

STM32 - Embedded IDE - GCC - 顯著減少固件的體積

導言如上圖所示&#xff0c;在編譯器附加選項&#xff08;全局&#xff09;里添加--specsnano.specs&#xff0c;告訴編譯器使用newlib-nano替代newlib去編譯代碼。 newlib vs. newlib-nano newlib 是 GNU ARM 工具鏈默認的 C 標準庫&#xff0c;功能完整&#xff0c;但體積較大…

python的美食交流社區系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 摘要&…

《Redis持久化機制對比與RDB/AOF調優方案》

&#x1f4da; Redis持久化機制對比與RDB/AOF調優方案 &#x1f9e0;前言 在生產環境中&#xff0c;Redis 常常被用作緩存&#xff0c;但在更多場景下&#xff0c;它還存儲著核心業務數據&#xff08;如會話、訂單、隊列任務等&#xff09;。一旦 Redis 宕機、數據丟失&#…

eXtremeDB 醫療設備開發實戰:從合規到實時,構建 EN62304 級數據管理系統

在醫療設備開發領域&#xff0c;數據管理的 “可靠性” 與 “合規性” 是不可逾越的紅線 —— 監護儀心率數據的丟失可能延誤診斷時機&#xff0c;胰島素泵劑量記錄的錯誤則直接威脅患者生命安全。eXtremeDB 憑借對 EN62304 標準的深度合規支持、硬實時數據處理能力及多層次安全…

linux 設備驅動的分層思想

一、 概述像這樣的分層設計在linux的input、RTC、MTD、I2c、SPI、tty、USB等諸多類型設備驅動中屢見不鮮,下面對這些驅動進行詳細的分析。二、 輸入設備驅動輸入設備&#xff08;如按鍵、鍵盤、觸摸屏、鼠標等&#xff09;是典型的字符設備&#xff0c;其一般的工…

【嵌入式硬件實例】-555定時器驅動直流無刷電機

555定時器驅動直流無刷電機 文章目錄 555定時器驅動直流無刷電機 1、555定時器介紹 2、BLDC,無刷直流電機 3、DRV10866 驅動器 4、硬件準備與接線 5、電路工作原理 在這個項目中,我們將使用 555 定時器 IC 和 DRV10866 驅動器 IC 制作 BLDC、無刷直流電機驅動電路。無刷電機可…

Helm 常用命令 + Bitnami 中間件部署速查表

文章目錄一、Helm 常用命令速查表1.1. 倉庫管理1.2. Chart 搜索1.3. 應用部署1.4. 應用管理二、Bitnami 常用中間件部署示例三、常用自定義參數&#xff08;values.yaml 配置項&#xff09;四、安裝后的訪問方式五、一鍵安裝腳本 install-middleware.sh5.1. 完整腳本5.2. 使用方…

Ansible 自動化運維實戰系列(六):Valut詳解

Ansible 自動化運維實戰系列&#xff08;六&#xff09;&#xff1a;Valut詳解&#x1f4da; 系列導航一&#xff1a;概述二&#xff1a;命令1&#xff09;創建加密文件2&#xff09;加密已有文件3&#xff09;查看加密文件4&#xff09;編輯加密文件5&#xff09;解密文件6&am…

《探秘瀏覽器Web Bluetooth API設備發現流程》

網頁若需與藍牙設備通信,往往需依賴本地客戶端或專用驅動程序作為中介,不僅增加了用戶操作成本,也限制了Web應用在跨設備場景中的拓展。而Web Bluetooth API的出現,直接賦予了網頁與低功耗藍牙(BLE)設備對話的能力,從智能手環的健康數據同步,到智能家居設備的遠程控制,…

Jenkins+Python自動化持續集成詳細教程

Python接口自動化測試零基礎入門到精通&#xff08;2025最新版&#xff09;Jenkins安裝 ? Jenkins是一個開源的軟件項目&#xff0c;是基于java開發的一種持續集成工具&#xff0c;用于監控持續重復的工作&#xff0c;旨在提供一個開放易用的軟件平臺&#xff0c;使軟件的持續…

C++面試——內存

一、簡述堆和棧的區別維度棧&#xff08;Stack&#xff09;堆&#xff08;Heap&#xff09;生命周期隨函數調用自動創建/銷毀由程序員或垃圾回收器控制分配速度極快&#xff08;僅移動指針&#xff09;慢&#xff08;需查找空閑塊、維護元數據&#xff09;空間大小較小&#xf…

UVM驗證(三)—UVM機制(1)

目錄 &#xff08;一&#xff09;Factory工廠機制 1. 工廠機制核心邏輯&#xff1a;“注冊 - 創建 - 覆蓋” 2. 代碼映射&#xff1a;從概念到實現 3. 實驗目標&#xff1a;用 dadd_fixen_driver 固定 data_en1 4. 工廠機制的價值&#xff1a;“靈活驗證的基石” 5. 常見…

前往中世紀 送修改器(Going Medieval)免安裝中文版

網盤鏈接&#xff1a; 前往中世紀 免安裝中文版 名稱&#xff1a;前往中世紀 送修改器&#xff08;Going Medieval&#xff09;免安裝中文版 描述&#xff1a; 在Going Medieval的世界中&#xff0c;黑暗時代的社會已瀕臨崩潰。14世紀末瘟疫肆虐&#xff0c;全球95%的人口因…

Font Awesome 參考手冊

Font Awesome 參考手冊 引言 Font Awesome 是一個功能強大的圖標庫,它允許開發者通過簡單的 CSS 類來添加圖標到網頁中。本手冊旨在為開發者提供全面的 Font Awesome 使用指南,包括圖標選擇、樣式定制以及常見問題解答。 圖標選擇 圖標分類 Font Awesome 提供了多種類別…

源網荷儲一體化零碳智慧工業園區建設

針對傳統工業園區等電力消納大戶存在的供電模式單一、能源管理錯雜、園區人員設備安全統籌不到位等諸多問題&#xff0c;通過AI分析及物聯網等新技術和自研交直流關鍵設備的應用&#xff0c;在三維場景中構建集智慧能源、智慧安防、碳排放管理及智慧運營等功能于一體的新型零碳…

MySQL表操作(DDL)

MySQL表操作創建表查看表結構修改表結構增加一列刪除一列修改某一列的屬性修改某一列的名字修改某一列的屬性和名字插入幾條信息刪除表創建表 語法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collat…

【總結】Python多線程

【總結】Python多線程備注一、基本概念二、備注 2025/08/15 星期五 最近用到了python的多線程發現和其他語言有點不同記錄一下 一、基本概念 首先要理解一下線程、進程和協程的概念 線程&#xff08;Thread&#xff09;&#xff1a;是計算機能夠調度的最小計算單位 進程&…

【c++深入系列】:萬字詳解模版(下)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 成功沒有標準答案&#xff0c;但堅持永遠是必選項 ★★★ 本文前置知識&#xff1a; 模版(上&#xff09; 那么在之前的文章中我們展示…

Docker部署美化SunPanel導航頁

使用Cloudflare Tunnels穿透的地址:星霜導航 由于是使用的iStore里面的SunPanel導航頁,只是基本的功能 頁腳配置 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" conte…

支持向量機的原理和案例解析

支持向量機的原理和案例解析一、支持向量機的核心目標&#xff1a;間隔最大化步驟1&#xff1a;定義分離超平面步驟2&#xff1a;定義樣本到超平面的距離&#xff08;間隔&#xff09;步驟3&#xff1a;間隔最大化的目標步驟4&#xff1a;簡化目標函數二、通過拉格朗日乘子法求…