国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Vue3 第十九章】插槽 slot

這篇具有很好參考價(jià)值的文章主要介紹了【Vue3 第十九章】插槽 slot。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

數(shù)字化管理平臺(tái)
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
權(quán)限系統(tǒng)-商城
個(gè)人博客地址

概述

在某些場(chǎng)景中,我們可能想要為子組件傳遞一些模板片段,讓子組件在它們的組件中渲染這些片段。這就用到了插槽。

插槽是子組件中的提供給父組件使用的一個(gè)占位符,用 <slot> 表示,父組件可以在這個(gè)占位符中填充任何模板代碼,如 HTML、組件等,填充的內(nèi)容會(huì)替換子組件的<slot> 元素。<slot> 元素是一個(gè)插槽出口 (slot outlet),標(biāo)示了父元素提供的插槽內(nèi)容 (slot content) 將在哪里被渲染。

vue3 動(dòng)態(tài)slot,Vue,前端,vue.js,前端框架

一、匿名插槽

子組件 FancyButton 中插槽模板

# 基礎(chǔ)用法
<button class="fancy-btn">
	<!-- 插槽出口 -->
	<slot></slot> 
</button>

# 可指定默認(rèn)插槽內(nèi)容:父組件沒(méi)有提供任何插槽內(nèi)容時(shí),默認(rèn)渲染的插槽內(nèi)容 Submit
<button class="fancy-btn">
	<slot>Submit</slot> 
</button>

父組件填充插槽內(nèi)容

<FancyButton>
	<!-- 插槽內(nèi)容 -->
	<div>Click me!</div>
</FancyButton>

# 或

<FancyButton>
	<!-- 插槽內(nèi)容 -->
	 <template v-slot>
       <div>Click Me</div>
    </template>
</FancyButton>

最終渲染出的 DOM 結(jié)構(gòu)如下

<button class="fancy-btn">Click me!</button>

通過(guò)使用插槽,使組件更加靈活和具有可復(fù)用性。這樣組件可以用在不同的地方渲染各異的內(nèi)容,但同時(shí)還保證都具有相同的樣式。

二、具名插槽 (named slots)

具名插槽其實(shí)就是給插槽取個(gè)名字。一個(gè)子組件可以放多個(gè)插槽,而且可以放在不同的地方,而父組件填充內(nèi)容時(shí),可以根據(jù)這個(gè)名字把內(nèi)容填充到對(duì)應(yīng)插槽中。

對(duì)于這種場(chǎng)景,<slot> 元素可以有一個(gè)特殊的屬性 name,用來(lái)給各個(gè)插槽分配唯一的 ID,以確定每一處要渲染的內(nèi)容:

  • 子組件預(yù)留的插槽

    <div class="container">
        <header>
        	<slot name="header"></slot>
        </header>
        <main>
        	<-- 沒(méi)有提供 name 的 slot 出口會(huì)隱式地命名為 “default” -->
        	<slot></slot>
        </main>
        <footer>
        	<slot name="footer"></slot>
        </footer>
    </div>
    
  • 父組件對(duì)指定插槽進(jìn)行填充

    要為具名插槽傳入內(nèi)容,我們需要使用一個(gè)含 v-slot 指令的 <template> 元素,并將目標(biāo)插槽的名字傳給該指令。

    <BaseLayout>
        <template v-slot:header>
           <div>header</div>
        </template>
        <template v-slot>
           <div>default</div>
        </template>
        <template v-slot:footer>
           <div>footer</div>
        </template>
    </BaseLayout>
    
  • v-slot 語(yǔ)法糖(簡(jiǎn)寫方式)

    v-slot 有對(duì)應(yīng)的簡(jiǎn)寫 #,因此 <template v-slot:header> 可以簡(jiǎn)寫為 <template #header>。其意思就是“將這部分模板片段傳入子組件的 header 插槽中”。

vue3 動(dòng)態(tài)slot,Vue,前端,vue.js,前端框架

<BaseLayout>
    <template #header>
    	<h1>Here might be a page title</h1>
    </template>

    <template #default>
    	<p>A paragraph for the main content.</p>
    	<p>And another one.</p>
    </template>

    <template #footer>
    	<p>Here's some contact info</p>
    </template>
</BaseLayout>

# 或

# 當(dāng)一個(gè)組件同時(shí)接收默認(rèn)插槽和具名插槽時(shí),所有位于頂級(jí)的非 <template> 節(jié)點(diǎn)都被隱式地視為默認(rèn)插槽的內(nèi)容。所以上面也可以寫成:
<BaseLayout>
    <template #header>
    	<h1>Here might be a page title</h1>
    </template>

    <!-- 隱式的默認(rèn)插槽 -->
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>

    <template #footer>
    	<p>Here's some contact info</p>
    </template>
</BaseLayout>

現(xiàn)在 <template> 元素中的所有內(nèi)容都將被傳遞到相應(yīng)的插槽。最終渲染出的 HTML 如下:

<div class="container">
    <header>
    	<h1>Here might be a page title</h1>
    </header>
    
    <main>
    	<p>A paragraph for the main content.</p>
    	<p>And another one.</p>
    </main>
    
    <footer>
    	<p>Here's some contact info</p>
    </footer>
</div>

三、動(dòng)態(tài)插槽

動(dòng)態(tài)指令參數(shù)在 v-slot 上也是有效的,即可以通過(guò)變量定義動(dòng)態(tài)插槽名:

<script setup>
	import { ref } from "vue";
	const name = ref('header')
</script>
<template>
	<base-layout>
		<template v-slot:[name]>
            <div>動(dòng)態(tài)插槽</div>
        </template>
	
		 <!-- 縮寫為 -->
        <template #[name]>
            <div>動(dòng)態(tài)插槽</div>
        </template>
    </base-layout>
</temppate>

四、作用域插槽

在某些場(chǎng)景下插槽的內(nèi)容可能想要同時(shí)使用父組件域內(nèi)和子組件域內(nèi)的數(shù)據(jù)??梢允褂脤傩越壎ǖ姆绞较蛞粋€(gè)插槽的出口上傳遞數(shù)據(jù),稱為插槽 props 。

4.1 匿名插槽數(shù)據(jù)傳遞

子組件 MyComponent傳遞插槽 props

<div>
  <slot :text="greetingMessage" :count="1"></slot>
</div>  

父組件接收插槽 props:默認(rèn)插槽通過(guò)子組件標(biāo)簽上的 v-slot 指令,直接接收到了一個(gè)插槽 props 對(duì)象

<MyComponent v-slot="slotProps">
	{{ slotProps.text }} {{ slotProps.count }}
</MyComponent>

# 或 在 v-slot 中使用解構(gòu)語(yǔ)法
<MyComponent v-slot="{ text, count }">
	{{ text }} {{ count }}
</MyComponent>

vue3 動(dòng)態(tài)slot,Vue,前端,vue.js,前端框架

4.2 具名插槽數(shù)據(jù)傳遞

具名作用域插槽的工作方式也是類似的,插槽 props 可以作為 v-slot 指令的值被訪問(wèn)到:v-slot:name="slotProps"。

<slot name="header" message="hello"></slot>
<MyComponent>
  <template #header="headerProps">
    {{ headerProps }}
  </template>

  <template #default="defaultProps">
    {{ defaultProps }}
  </template>

  <template #footer="footerProps">
    {{ footerProps }}
  </template>
</MyComponent>

4.3 作用域插槽應(yīng)用場(chǎng)景:高級(jí)列表組件示例

你可能想問(wèn)什么樣的場(chǎng)景才適合用到作用域插槽,這里我們來(lái)看一個(gè) <FancyList> 組件的例子。它會(huì)渲染一個(gè)列表,并同時(shí)會(huì)封裝一些加載遠(yuǎn)端數(shù)據(jù)的邏輯、使用數(shù)據(jù)進(jìn)行列表渲染、或者是像分頁(yè)或無(wú)限滾動(dòng)這樣更進(jìn)階的功能。然而我們希望它能夠保留足夠的靈活性,將對(duì)單個(gè)列表元素內(nèi)容和樣式的控制權(quán)留給使用它的父組件。我們期望的用法可能是這樣的:

<FancyList :api-url="url" :per-page="10">
    <template #item="{ body, username, likes }">
        <div class="item">
          <p>{{ body }}</p>
          <p>by {{ username }} | {{ likes }} likes</p>
        </div>
    </template>
</FancyList>

<FancyList> 之中,我們可以多次渲染 <slot> 并每次都提供不同的數(shù)據(jù) (注意我們這里使用了 v-bind 來(lái)傳遞插槽的 props):

<ul>
  <li v-for="item in items">
    <slot name="item" v-bind="item"></slot>
  </li>
</ul>

上面的 <FancyList> 案例同時(shí)封裝了可重用的邏輯 (數(shù)據(jù)獲取、分頁(yè)等) 和視圖輸出,但也將部分視圖輸出通過(guò)作用域插槽交給了消費(fèi)者組件來(lái)管理。

如果我們將這個(gè)概念拓展一下,可以想象的是,一些組件可能只包括了邏輯而不需要自己渲染內(nèi)容,視圖輸出通過(guò)作用域插槽全權(quán)交給了消費(fèi)者組件。我們將這種類型的組件稱為無(wú)渲染組件。

這里有一個(gè)無(wú)渲染組件的例子,一個(gè)封裝了追蹤當(dāng)前鼠標(biāo)位置邏輯的組件:

<MouseTracker v-slot="{ x, y }">
	Mouse is at: {{ x }}, {{ y }}
</MouseTracker>

雖然這個(gè)模式很有趣,但大部分能用無(wú)渲染組件實(shí)現(xiàn)的功能都可以通過(guò)組合式 API 以另一種更高效的方式實(shí)現(xiàn),并且還不會(huì)帶來(lái)額外組件嵌套的開(kāi)銷。
盡管如此,作用域插槽在需要同時(shí)封裝邏輯、組合視圖界面時(shí)還是很有用,就像上面的 <FancyList> 組件那樣。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-700304.html

到了這里,關(guān)于【Vue3 第十九章】插槽 slot的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 第十九章:Linux中安裝MySQL

    第十九章:Linux中安裝MySQL

    查看是否安裝過(guò) MySQL MySQL 卸載 關(guān)閉 ,ysql 服務(wù) 查詢當(dāng)前 mysql 安裝狀態(tài) 卸載上述命令【任意一條就行】查詢出的已安裝程序 注意:務(wù)必卸載干凈,反復(fù)執(zhí)行 rpm -qa | grep -i mysql 確認(rèn)是否有卸載殘留。 刪除 mysql 相關(guān)文件 刪除 my.cnf 【 MySQL 的配置文件】 檢查 /tmp 臨時(shí)目錄權(quán)限

    2024年02月13日
    瀏覽(27)
  • 【Rust】Rust學(xué)習(xí) 第十九章高級(jí)特征

    【Rust】Rust學(xué)習(xí) 第十九章高級(jí)特征

    現(xiàn)在我們已經(jīng)學(xué)習(xí)了 Rust 編程語(yǔ)言中最常用的部分。在第二十章開(kāi)始另一個(gè)新項(xiàng)目之前,讓我們聊聊一些總有一天你會(huì)遇上的部分內(nèi)容。你可以將本章作為不經(jīng)意間遇到未知的內(nèi)容時(shí)的參考。本章將要學(xué)習(xí)的功能在一些非常特定的場(chǎng)景下很有用處。雖然很少會(huì)碰到它們,我們

    2024年02月11日
    瀏覽(24)
  • 信安軟考 第十九章 操作系統(tǒng)安全保護(hù)

    信安軟考 第十九章 操作系統(tǒng)安全保護(hù)

    一、操作系統(tǒng)安全概述 1.1 操作系統(tǒng)安全概念與需求 操作系統(tǒng)(operating system),以下都簡(jiǎn)稱OS 操作系統(tǒng) 負(fù)責(zé)計(jì)算機(jī)系統(tǒng)的資源管理,支撐和控制各種應(yīng)用程序運(yùn)行,為用戶提供計(jì)算機(jī)系統(tǒng)管理接口 。操作系統(tǒng)是構(gòu)成信息網(wǎng)絡(luò)系統(tǒng)的核心關(guān)鍵組件,其安全可靠程度決定了計(jì)算

    2024年02月06日
    瀏覽(36)
  • TCP/IP網(wǎng)絡(luò)編程 第十九章:Windows平臺(tái)下線程的使用

    要想掌握Windows平臺(tái)下的線程,應(yīng)首先理解“內(nèi)核對(duì)象”(Kernel Objects)的概念。如果僅介紹Windows平臺(tái)下的線程使用技巧,則可以省略相對(duì)陌生的內(nèi)核對(duì)象相關(guān)內(nèi)容。但這并不能使各位深入理解Windows平臺(tái)下的線程。 內(nèi)核對(duì)象的定義 操作系統(tǒng)創(chuàng)建的資源有很多種,如進(jìn)程、線程

    2024年02月16日
    瀏覽(30)
  • 【Linux命令行與Shell腳本編程】第十九章 正則表達(dá)式

    【Linux命令行與Shell腳本編程】第十九章 正則表達(dá)式

    正則表達(dá)式基礎(chǔ) 定義BRE模式 擴(kuò)展正則表達(dá)式 在sed和gawk中創(chuàng)建正則表達(dá)式,以得到所需的數(shù)據(jù)。 正則表達(dá)式是一種可供Linux工具過(guò)濾文本的自定義模板,使用元字符來(lái)描述數(shù)據(jù)流中的一個(gè)或多個(gè)字符. Linux工具(比如sed或gawk)會(huì)在讀取數(shù)據(jù)時(shí)使用正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行模式匹配

    2024年02月13日
    瀏覽(24)
  • Hotspot源碼解析-第十九章-ClassLoaderData、符號(hào)表、字符串表的初始化

    Hotspot源碼解析-第十九章-ClassLoaderData、符號(hào)表、字符串表的初始化

    講解本章先從一張圖開(kāi)始 眾所周知,Java類的相關(guān)信息都是存儲(chǔ)在元空間中的,但是是怎么存儲(chǔ)的,相信很多讀者是不清楚的,這里就不得不涉及到ClassLoaderDataGraph、classLoader、classLoaderData(簡(jiǎn)稱CLD)和Klass的概念及他們四者的關(guān)系,這里簡(jiǎn)單描述下他們的概念,具體細(xì)節(jié)放到

    2024年01月17日
    瀏覽(21)
  • 第十九章 調(diào)用Callout Library函數(shù) - 將 $ZF(-5) 與多個(gè)庫(kù)和許多函數(shù)調(diào)用一起使用

    對(duì) $ZF(-4,1) 的調(diào)用將標(biāo)注庫(kù) inputlibrary.dll 和 outputlibrary.dll 加載到虛擬內(nèi)存中,并為其返回系統(tǒng)定義的庫(kù) ID 。 對(duì) $ZF(-4,3) 的調(diào)用使用庫(kù) ID 和函數(shù)名稱來(lái)獲取庫(kù)函數(shù)的 ID 。返回的函數(shù) ID 實(shí)際上是 ZFEntry 表序列號(hào)(請(qǐng)參閱上一章中的“創(chuàng)建 ZFEntry 表”)。 第一個(gè)循環(huán)使用 $ZF(-5

    2024年01月16日
    瀏覽(24)
  • 【vue2第十四章】 插槽(普通插槽、具名插槽、作用域插槽語(yǔ)法)

    【vue2第十四章】 插槽(普通插槽、具名插槽、作用域插槽語(yǔ)法)

    插槽是什么? 在 Vue 2 中,插槽(slot)是一種用于定義組件內(nèi)部?jī)?nèi)容分發(fā)的機(jī)制。它允許你將組件中的一部分內(nèi)容替換為用戶自定義的內(nèi)容,并在組件內(nèi)部進(jìn)行渲染。 通過(guò)在組件模板中使用 slot/slot 標(biāo)簽,你可以指定一個(gè)插槽的位置。這個(gè)位置可以被父組件中的任意內(nèi)容所填

    2024年02月09日
    瀏覽(18)
  • vue 3 第二十九章:路由管理(Vue Router4.x基礎(chǔ)知識(shí))

    Vue Router 是 Vue.js 官方的 路由管理器 。它和 Vue.js 的 核心 深度集成,可以輕松地 構(gòu)建單頁(yè)面應(yīng)用程序 。Vue Router 允許我們?cè)趹?yīng)用程序中 定義路由 ,然后根據(jù) URL 來(lái) 匹配路由 ,并 渲染對(duì)應(yīng)的組件 。 Vue Router 的核心概念包括 路由 、 路由器 、 路由視圖 和 導(dǎo)航守衛(wèi) 。 路由

    2024年02月07日
    瀏覽(30)
  • 算法通關(guān)第十九關(guān)-青銅挑戰(zhàn)理解動(dòng)態(tài)規(guī)劃

    算法通關(guān)第十九關(guān)-青銅挑戰(zhàn)理解動(dòng)態(tài)規(guī)劃

    大家好我是蘇麟 , 今天聊聊動(dòng)態(tài)規(guī)劃 . 動(dòng)態(tài)規(guī)劃是最熱門、最重要的算法思想之一,在面試中大量出現(xiàn),而且題目整體都偏難一些對(duì)于大部人來(lái)說(shuō),最大的問(wèn)題是不知道動(dòng)態(tài)規(guī)劃到底是怎么回事。很多人看教程等,都被里面的狀態(tài)子問(wèn)題、狀態(tài)轉(zhuǎn)移方程等等勸退了。 其實(shí),所

    2024年02月03日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包