vue中的slot(插槽)

最近忙著寫一些組件解愤,關(guān)于插槽這一塊自己還是用著 slot 和 slot-scope训唱,然后看了一下文檔的更新尝偎,于是又重新把“插槽”學(xué)習(xí)了一篇国夜,下面一段是文檔中的說明:

在 2.6.0 中,我們?yōu)榫呙宀酆妥饔糜虿宀垡肓艘粋€(gè)新的統(tǒng)一的語法 (即 v-slot 指令)厦凤。它取代了 slotslot-scope 這兩個(gè)目前已被廢棄但未被移除且仍在文檔中的特性鼻吮。新語法的由來可查閱這份 RFC

插槽较鼓,也就是slot椎木,slot就是子組件里的一個(gè)占位符违柏,一個(gè)slot的核心問題,就是顯不顯示香椎,顯示的話顯示話漱竖,該如何去展示出來,這是由父組件所控制的畜伐,但是插槽顯示的位置是由子組件自己所決定的馍惹,slot寫在組件template的什么位置,父組件傳過來的模板將會(huì)顯示在什么位置玛界。

插槽的基本使用方法(匿名插槽)

這是一個(gè)子組件讼积,我們使用了默認(rèn)插槽(匿名插槽),父組件的內(nèi)容將會(huì)代替<slot></slot>顯示出來

<template>
  <div>
    <slot></slot>
  </div>
</template>
<script>
export default {
  name: 'children'
}
</script>
// 使用children組件
 <children>代替slot的內(nèi)容</children>

渲染后的結(jié)果

<template>
  <div>
    代替slot的內(nèi)容
  </div>
</template>
具名插槽

自 2.6.0 起有所更新脚仔。已廢棄的使用 slot 特性的語法在這里勤众。

有時(shí)我們一個(gè)組件里面需要多個(gè)插槽。我們?cè)趺磥韰^(qū)分多個(gè)slot鲤脏,而且不同slot的顯示位置也是有差異的.對(duì)于這樣的情況们颜,<slot> 元素有一個(gè)特殊的特性:name。這個(gè)特性可以用來定義額外的插槽:

  • 注意:一個(gè)不帶 name 的 <slot> 出口會(huì)帶有隱含的名字“default”猎醇。

如下面一個(gè)組件,需要多個(gè)插槽窥突。如何向組件提供內(nèi)容呢?

<template>
  <div>
    <header>
      <slot name="header"></slot>
      <slot></slot>
    </header>
    <main>
      <slot></slot>
    </main>
  </div>
</template>

在向具名插槽提供內(nèi)容的時(shí)候硫嘶,我們可以在一個(gè) <template> 元素上使用 v-slot 指令阻问,并以 v-slot 的參數(shù)的形式提供其名稱:

<!-- old -->
<children>
  <template slot="header">
    <h1>Here might be a page title</h1>
  </template>
  <template slot="default">
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </template>
</children>

<!-- new -->
<children>
  <template v-slot:header>
  <!--  <template #header> 具名插槽可縮寫形式 -->
    <h1>Here might be a page title</h1>
  </template>
  <template v-slot:default>
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </template>
</children>

渲染后的結(jié)果

<template>
  <div>
    <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>
  </div>
</template>
  • 注意:v-slot 只能添加在一個(gè) <template> (只有一種例外情況),這一點(diǎn)和已經(jīng)廢棄的 slot特性不同沦疾。

  • 例外情況: 當(dāng)被提供的內(nèi)容只有默認(rèn)插槽時(shí)称近,組件的標(biāo)簽才可以被當(dāng)作插槽的模板來使用。這樣我們就可以把 v-slot 直接用在組件上:

作用域插槽

自 2.6.0 起有所更新哮塞。已廢棄的使用 slot-scope 特性的語法在這里刨秆。

有時(shí)候,插槽的內(nèi)容中有需要訪問到子組件里面的內(nèi)容忆畅,類似子組件里的slot可以綁定一些當(dāng)前作用域衡未,從而傳出來,使用組件時(shí)家凯,插槽的內(nèi)容就可以拿到slot傳出來的數(shù)據(jù),父級(jí)的插槽內(nèi)容可用缓醋。

如下,讓后備內(nèi)容(slot默認(rèn)內(nèi)容)user.firstName 替換正常情況下的user.lastName

<span>
  <slot>
    {{ user.lastName}}
  </slot>
</span>

綁定在 <slot> 元素上的特性被稱為插槽 prop“砘澹現(xiàn)在在父級(jí)作用域中送粱,我們可以給 v-slot 帶一個(gè)值來定義我們提供的插槽 prop 的名字:

// slot綁定了當(dāng)前作用域下user對(duì)象
// 為什slot中還有內(nèi)容呢?不是由插槽內(nèi)容填充嗎驯镊?在slot中有內(nèi)容葫督,我們可以稱之為后備內(nèi)容,
就是slot的默認(rèn)內(nèi)容板惑,但我們使用這個(gè)插槽時(shí)橄镜,卻沒有內(nèi)容填充,就會(huì)顯示其默認(rèn)的內(nèi)容冯乘。
<span>
  <slot v-bind:user="user">
    {{ user.lastName }}
  </slot>
</span>

在父級(jí)作用域中洽胶,我們可以給 v-slot 帶一個(gè)值來定義我們提供的插槽 prop 的名字,slotProps可以任意命名的,通過slotProps.use就拿到了子組件slot傳出來的對(duì)象裆馒。

<!-- old -->
<children>
  <template slot="default" slot-scope="slotProps">
    {{ slotProps.user.firstName }}
  </template>
</children>

<!-- new -->
<children>
  <template v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
  </template>
</children>

在上述情況下姊氓,當(dāng)被提供的內(nèi)容只有默認(rèn)插槽時(shí),這樣我們就可以把 v-slot 直接用在組件上:

<children v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
</children>
// default可以省略,默認(rèn)插槽的縮寫語法
<children v-slot="slotProps">
    {{ slotProps.user.firstName }}
</children>
<!-- 解構(gòu)插槽 prop -->
<childrenv-slot="{ user }">
    {{ user.firstName }}
</children>
<!-- user 重命名為 person-->
<childrenv-slot="{ user: person}">
    {{ person.firstName }}
</children>
  • 注意:默認(rèn)插槽的縮寫語法不能和具名插槽混用喷好,因?yàn)樗鼤?huì)導(dǎo)致作用域不明確,只要出現(xiàn)多個(gè)插槽翔横,請(qǐng)始終為所有的插槽使用完整的基于 <template> 的語法
后備內(nèi)容

什么是后備內(nèi)容呢,一個(gè)slot有它的默認(rèn)的內(nèi)容梗搅,有時(shí)為一個(gè)插槽設(shè)置具體的后備 (也就是默認(rèn)的) 內(nèi)容是很有用的禾唁,它只會(huì)在沒有提供內(nèi)容的時(shí)候被渲染。

總結(jié)

這里只是簡(jiǎn)單描述了幾個(gè)關(guān)鍵點(diǎn)无切,其實(shí)還有很多可擴(kuò)展的荡短,或其他特性,我們還是需要多去看文檔哆键,多學(xué)習(xí)掘托。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籍嘹,隨后出現(xiàn)的幾起案子闪盔,更是在濱河造成了極大的恐慌,老刑警劉巖辱士,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锭沟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡识补,警方通過查閱死者的電腦和手機(jī)族淮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凭涂,“玉大人祝辣,你說我怎么就攤上這事∏杏停” “怎么了蝙斜?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澎胡。 經(jīng)常有香客問我孕荠,道長娩鹉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任稚伍,我火速辦了婚禮弯予,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘个曙。我一直安慰自己锈嫩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布垦搬。 她就那樣靜靜地躺著呼寸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猴贰。 梳的紋絲不亂的頭發(fā)上对雪,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音米绕,去河邊找鬼慌植。 笑死,一個(gè)胖子當(dāng)著我的面吹牛义郑,可吹牛的內(nèi)容都是我干的蝶柿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼非驮,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼交汤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劫笙,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤芙扎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后填大,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戒洼,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年允华,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了圈浇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靴寂,死狀恐怖磷蜀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情百炬,我是刑警寧澤褐隆,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站剖踊,受9級(jí)特大地震影響庶弃,放射性物質(zhì)發(fā)生泄漏衫贬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一歇攻、第九天 我趴在偏房一處隱蔽的房頂上張望固惯。 院中可真熱鬧,春花似錦掉伏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至摊聋,卻和暖如春鸡捐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背麻裁。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工箍镜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煎源。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓色迂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親手销。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歇僧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348