Vue插槽slot的使用

vue官方文檔中關(guān)于slot插槽的說明很簡短,語言又寫的很凝練,這就有可能造成初次接觸插槽的開發(fā)者容易產(chǎn)生“算了吧,回頭再學(xué),反正已經(jīng)可以寫基礎(chǔ)組件了”的想法坠七,于是就關(guān)閉了vue的說明文檔水醋。

一、slot的作用

Q: 假如父組件需要在子組件內(nèi)放一些DOM元素彪置,那么這些DOM是顯示呢還是不顯示呢拄踪?

默認(rèn)情況下是不會顯示的,如下圖所示拳魁,頁面并沒有顯示父組件增加的<span>我是魔鬼</span> 元素內(nèi)容惶桐。那么我執(zhí)意要加DOM元素到子組件上該怎么實現(xiàn)呢?這就用到了slot插槽潘懊,使用slot這個標(biāo)簽可以將父組件放在子組件的內(nèi)容姚糊,放到它想顯示的地方

<div id="app">  
  <children>  
    <span>我是魔鬼</span>  
    <!--上面這行不會顯示-->  
  </children>  
</div>  
<script>  
  var vm = new Vue({  
      el: '#app',  
      components: {  
         children: {   
         template: "<h1>我是子組件</h1>"  
       }  
     }  
  });  
</script>  

二、簡單理解slot

通俗易懂的講授舟,slot具有“占坑”的作用救恨,在子組件占好了位置,那父組件使用該子組件標(biāo)簽時释树,新添加的DOM元素就會自動填到這個坑里面

三肠槽、單個slot

我們將上面的代碼改一改 , 給child組件添加slot插槽,那么父組件的添加的DOM元素就填充到這個slot插槽里面了

注意:如果有多個DOM元素奢啥,會一起插入到<slot></slot>這個標(biāo)簽內(nèi)

<div id="app">  
  <children>  
    <span>我是魔鬼</span>  
    <!--上面這行會顯示在 “我是子組件” 數(shù)據(jù)后面-->  
  </children>  
</div>  
<script>  
  var vm = new Vue({  
      el: '#app',  
      components: {  
         children: {   
         template: "<h1>我是子組件</h1><slot></slot>"  
       }  
     }  
  });  
</script>  

四秸仙、具名插槽

現(xiàn)在我們需要將父組件添加的HTML標(biāo)簽放在子組件里的不同位置。具名插槽實現(xiàn):先在子組件對應(yīng)分發(fā)slot標(biāo)簽里桩盲,添加name=”name名” 屬性寂纪,其次父組件在要分發(fā)的標(biāo)簽里添加 slot=”name名” 屬性,然后就會將對應(yīng)的標(biāo)簽放在對應(yīng)的位置了赌结。

簡單理解就是:給子組件占的每一個坑取名捞蛋,將父組件添加的HTML元素添加到指定名字的坑,就實現(xiàn)了分發(fā)內(nèi)容在不同位置顯示

【Child組件模板】

<template>
  <div>
    <slot name="header"></slot>
    <h1>我是子組件</h1>
    <slot name="footer"></slot>
  </div>
</template>

【父組件引用Child組件】

<Child>
  <span slot="header">我是header</span>
  <span slot="footer">我是footer</span>
</Child>

五姑曙、編輯作用域

父組件模板的內(nèi)容在父組件作用域內(nèi)編譯襟交;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯

【Child組件模板】

<template>
  <div>
    <slot name="header"></slot>
    <h1>{{msg}}</h1>
    <slot></slot>
    <slot name="footer"></slot>
  </div>
</template>
<script>
export default {
  data() {
    return {
      msg: '我是子組件里面的內(nèi)容'
    }
  }
}
</script>

【父組件引用Child組件】

<template>
  <Child>
    <span slot="header">我是header</span>
    <h1>{{msg}}</h1>
    <span slot="footer">我是footer</span>
  </Child>
</template>
<script>
export default {
  data() {
    return {
      msg: '我是父組件的內(nèi)容'
    }
  }
}
</script>

六迈倍、解構(gòu)slot-scope

在子組件中插槽中通過:data綁定了數(shù)據(jù)伤靠,父組件可以通過slot-scope="name"來取得子組件作用域插槽:data綁定的數(shù)據(jù),name的名稱可以隨便取啼染,用來定義對象來代替取到的data數(shù)據(jù)宴合。

【Child組件模板】

<template>
  <div>
    <slot :data="data"></slot>
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: ['Neinei','Laoba','Demi','Feiyan']
    }
  }
}
</script>

【父組件引用Child組件】

  <template>
    <!-- 循環(huán)數(shù)據(jù)列表 -->
    <Child>
      <div slot-scope="msg">
        <span v-for="item in msg.data">{{item}} </span>
      </div>
    </Child>

    <!-- 直接顯示數(shù)據(jù) -->
    <Child>
      <div slot-scope="msg">
        <span>{{msg.data}} </span>
      </div>
    </Child>

    <!-- 不使用其提供的數(shù)據(jù), 作用域插槽退變成匿名插槽 -->
    <Child>
      <div>我是插槽</div>
    </Child>
  </template>

文章每周持續(xù)更新,可以微信搜索「 前端大集錦 」第一時間閱讀迹鹅,回復(fù)【視頻】【書籍】領(lǐng)取200G視頻資料和30本PDF書籍資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卦洽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斜棚,更是在濱河造成了極大的恐慌阀蒂,老刑警劉巖该窗,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚤霞,居然都是意外死亡酗失,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門昧绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來规肴,“玉大人,你說我怎么就攤上這事夜畴⊥先校” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵贪绘,是天一觀的道長兑牡。 經(jīng)常有香客問我,道長兔簇,這世上最難降的妖魔是什么发绢? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮垄琐,結(jié)果婚禮上边酒,老公的妹妹穿的比我還像新娘。我一直安慰自己狸窘,他們只是感情好墩朦,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翻擒,像睡著了一般氓涣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陋气,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天劳吠,我揣著相機與錄音,去河邊找鬼巩趁。 笑死痒玩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的议慰。 我是一名探鬼主播蠢古,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼别凹!你這毒婦竟也來了草讶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤炉菲,失蹤者是張志新(化名)和其女友劉穎堕战,沒想到半個月后坤溃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嘱丢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年浇雹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屿讽。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡昭灵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伐谈,到底是詐尸還是另有隱情烂完,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布诵棵,位于F島的核電站抠蚣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏履澳。R本人自食惡果不足惜嘶窄,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望距贷。 院中可真熱鬧柄冲,春花似錦、人聲如沸忠蝗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阁最。三九已至戒祠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間速种,已是汗流浹背姜盈。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留配阵,地道東北人馏颂。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像闸餐,于是被迫代替她去往敵國和親饱亮。 傳聞我的和親對象是個殘疾皇子矾芙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355