大前端之vue插槽slot

什么是插槽恭取?
在vue中通過(guò)slot可以向組件中指定位置插入內(nèi)容困曙。

正常情況下調(diào)用一個(gè)組件<com-form></com-form>的時(shí)候咽筋,組件顯示的內(nèi)容為com-input組件中模板的內(nèi)容油挥」嘶迹可是想在調(diào)用組件的時(shí)候給組件添加內(nèi)容自娩,該怎么辦呢用踩?

//父組件
<com-form>
  <span>我是插槽內(nèi)容</span>
</com-form>
//子組件com-form
<templete>
<div>
  我是組件內(nèi)容
  <slot></slot>
</div>
</templete>
//顯示---我是組件內(nèi)容 我是插槽內(nèi)容

插槽的通俗理解就是是“占坑”,在組件模板中占好了位置忙迁,當(dāng)使用該組件標(biāo)簽時(shí)候脐彩,組件標(biāo)簽里面的內(nèi)容就會(huì)自動(dòng)填坑(替換組件模板中<slot>位置),當(dāng)插槽也就是坑<slot name=”mySlot”>有命名時(shí)姊扔,組件標(biāo)簽中使用屬性slot=”mySlot”的元素就會(huì)替換該對(duì)應(yīng)位置內(nèi)容惠奸。

一、單個(gè)插槽/默認(rèn)插槽/匿名插槽

首先是單個(gè)插槽恰梢,單個(gè)插槽是vue的官方叫法佛南,但是其實(shí)也可以叫它默認(rèn)插槽,或者與具名插槽相對(duì)嵌言,我們可以叫它匿名插槽嗅回。因?yàn)樗挥迷O(shè)置name屬性。
單個(gè)插槽可以放在組件任意位置摧茴,但是一個(gè)組件有且只能有一個(gè)單個(gè)插槽绵载,相對(duì)應(yīng)的,具名插槽就可以有很多個(gè)苛白。

父組件:
<template>
    <div class="father">
        <h3>這里是父組件</h3>
        <child>
            <div class="tmpl">
              <span>菜單1</span>
              <span>菜單2</span>
              <span>菜單3</span>
              <span>菜單4</span>
              <span>菜單5</span>
              <span>菜單6</span>
            </div>
        </child>
    </div>
</template>
子組件:
<template>
    <div class="child">
        <h3>這里是子組件</h3>
        <slot></slot>
    </div>
</template>
最終顯示

二娃豹、具名插槽

匿名插槽沒(méi)有name屬性,所以是匿名插槽购裙,那么懂版,插槽加了name屬性,就變成了具名插槽躏率。具名插槽可以在一個(gè)組件中出現(xiàn)N次躯畴,出現(xiàn)在不同的位置。下面的例子禾锤,就是一個(gè)有兩個(gè)具名插槽和單個(gè)插槽的組件私股,這三個(gè)插槽被父組件用同一套css樣式顯示了出來(lái),不同的是內(nèi)容上略有區(qū)別恩掷。

父組件:
<template>
  <div class="father">
    <h3>這里是父組件</h3>
    <child>
      <div class="tmpl" slot="up">
        <span>菜單1</span>
        <span>菜單2</span>
        <span>菜單3</span>
        <span>菜單4</span>
        <span>菜單5</span>
        <span>菜單6</span>
      </div>
      <div class="tmpl" slot="down">
        <span>菜單-1</span>
        <span>菜單-2</span>
        <span>菜單-3</span>
        <span>菜單-4</span>
        <span>菜單-5</span>
        <span>菜單-6</span>
      </div>
      <div class="tmpl">
        <span>菜單->1</span>
        <span>菜單->2</span>
        <span>菜單->3</span>
        <span>菜單->4</span>
        <span>菜單->5</span>
        <span>菜單->6</span>
      </div>
    </child>
  </div>
</template>
子組件:
<template>
  <div class="child">
    // 具名插槽
    <slot name="up"></slot>
    <h3>這里是子組件</h3>
    // 具名插槽
    <slot name="down"></slot>
    // 匿名插槽
    <slot></slot>
  </div>
</template>
最終顯示

三倡鲸、作用域插槽

匿名插槽和具名插槽都是在父組件中定義內(nèi)容與樣式,子組件只是負(fù)責(zé)放在哪黄娘。但是如果子組件提供數(shù)據(jù)峭状,那這樣的話(huà)需要子組件的<slot>把數(shù)據(jù)傳遞給父組件克滴,父組件只需要提供樣式即可。

子組件child
<template>
  <div class="child">

    <h3>這里是子組件</h3>
    // 作用域插槽
    <slot  :data="data"></slot>
  </div>
</template>

 export default {
    data: function(){
      return {
        data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba']
      }
    }
}
父組件
<template>
  <div class="father">
    <h3>這里是父組件</h3>
    <!--第一次使用:用flex展示數(shù)據(jù)-->
    <child>
      <template slot-scope="user">
        <div class="tmpl">
          <span v-for="item in user.data">{{item}}</span>
        </div>
      </template>

    </child>

    <!--第二次使用:用列表展示數(shù)據(jù)-->
    <child>
      <template slot-scope="user">
        <ul>
          <li v-for="item in user.data">{{item}}</li>
        </ul>
      </template>

    </child>

    <!--第三次使用:直接顯示數(shù)據(jù)-->
    <child>
      <template slot-scope="user">
       {{user.data}}
      </template>

    </child>

    <!--第四次使用:不使用其提供的數(shù)據(jù), 作用域插槽退變成匿名插槽-->
    <child>
      我就是模板
    </child>
  </div>
</template>
最終展示

四优床、v-slot

在 2.6.0 中劝赔,我們?yōu)榫呙宀酆妥饔糜虿宀垡肓艘粋€(gè)新的統(tǒng)一的語(yǔ)法 (即 v-slot 指令)。它取代了 slotslot-scope 這兩個(gè)目前已被廢棄但未被移除且仍在文檔中的 attribute胆敞。

// 根組件
<template>
    <div>
        <mo>
            <template v-slot:header="slotProps">
                <h1>{{slotProps.header + ' ' + msg}}</h1>
            </template>
            <p>A paragraph for the main content.</p>
            <p>And another one.</p>
            <template v-slot:footer>
                <p>Here's some contact info</p>
            </template>
        </mo>
    </div>
</template>
<script>
    import mo from './module.vue'
    export default {
        components: {
            mo
        },
        data() {
            return {
                msg: '這是根組件的消息'
            }
        }
    }
</script>
// 子組件
<template>
    <div>
        --header start--
        <header>
            <slot name="header" :header="header"></slot>
        </header>
        --header over--
        <div></div>
        --default start--
        <slot></slot>
        --default over--
        <div></div>
        --footer start--
        <footer>
            <slot name="footer"></slot>
        </footer>
        --dooter over--
    </div>
</template>
<script>
    export default {
        data() {
            return {
                header: '來(lái)自子組件的頭部消息'
            }
        }
    }
</script>
<style scoped>
</style>
最終顯示
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末着帽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子移层,更是在濱河造成了極大的恐慌仍翰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件观话,死亡現(xiàn)場(chǎng)離奇詭異予借,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)频蛔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)灵迫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晦溪,你說(shuō)我怎么就攤上這事瀑粥。” “怎么了三圆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵利凑,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嫌术,道長(zhǎng),這世上最難降的妖魔是什么牌借? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任度气,我火速辦了婚禮,結(jié)果婚禮上膨报,老公的妹妹穿的比我還像新娘磷籍。我一直安慰自己,他們只是感情好现柠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布院领。 她就那樣靜靜地躺著,像睡著了一般够吩。 火紅的嫁衣襯著肌膚如雪比然。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天周循,我揣著相機(jī)與錄音强法,去河邊找鬼万俗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饮怯,可吹牛的內(nèi)容都是我干的闰歪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蓖墅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼库倘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起论矾,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤教翩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拇囊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體迂曲,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年寥袭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了路捧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡传黄,死狀恐怖杰扫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膘掰,我是刑警寧澤章姓,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站识埋,受9級(jí)特大地震影響凡伊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窒舟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一系忙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惠豺,春花似錦银还、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至热监,卻和暖如春捺弦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工羹呵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骂际,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓冈欢,卻偏偏與公主長(zhǎng)得像歉铝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凑耻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • vue中關(guān)于插槽的文檔說(shuō)明很短太示,語(yǔ)言又寫(xiě)的很凝練,再加上其和methods香浩,data类缤,computed等常用選項(xiàng)使...
    Yin先生閱讀 581評(píng)論 0 6
  • vue中關(guān)于插槽的文檔說(shuō)明很短,語(yǔ)言又寫(xiě)的很凝練邻吭,再加上其和methods餐弱,data,computed等常用選項(xiàng)使...
    Apple_Boy閱讀 748評(píng)論 0 0
  • 前言 記錄平時(shí)學(xué)到的知識(shí)囱晴,標(biāo)題寫(xiě)的大氣一點(diǎn)膏蚓,也算是給自己一點(diǎn)鼓勵(lì),希望在技術(shù)這條路可以遠(yuǎn)走越遠(yuǎn)畸写,路越走越寬~ 文中...
    徐國(guó)軍_plus閱讀 1,316評(píng)論 0 12
  • 1枯芬、什么是插槽 VUE官方文檔的解釋?zhuān)?Vue 實(shí)現(xiàn)了一套內(nèi)容分發(fā)的 API论笔,將 <slot> 元素作為承載分發(fā)內(nèi)...
    五花漏Z閱讀 36,564評(píng)論 3 26
  • 【2019-3-4更新】Vue 2.6+修改了部分語(yǔ)法,對(duì)插槽的使用有了較多的更新千所。在本文中筆者在相應(yīng)位置給出了更...
    果汁涼茶丶閱讀 10,231評(píng)論 2 36