Vue系列-插槽$slot

在Vue中,插槽slot是可以由組件使用者來自定義內(nèi)容,用來做組件的擴(kuò)展。

如下,我們封裝了一個(gè)列表組件
<template>
      ul
          li(v-for="item in list")
                span(v-html="item.text")
</template>
<script>
  export default{
      props:["list"]
  }
</script>

默認(rèn)該組件可以讓使用者傳入list,遍歷顯示list中每個(gè)item的text值
但是,當(dāng)使用者,不僅僅用來顯示text值時(shí),組件就要求做調(diào)整
如果不同使用者想要呈現(xiàn)的方式各異,我們沒理由為這不同的呈現(xiàn)做特殊定制
這時(shí)候插槽就派上用場(chǎng),將組件改造如下
<template>
      ul
          li(v-for="item in list")
              slot(:item="item")  
                  span(v-html="item.text")
</template>
<script>
  export default{
      props:["list"]
  }
</script>

使用者就可以自定義插槽內(nèi)容,如list就是我們封裝好的組件
可以顯示內(nèi)容項(xiàng)的名字
<list><tempalte scope="props"><span v-html="props.item.name"></span></template></list>
可以顯示內(nèi)容項(xiàng)的圖片和描述
<list>
<tempalte scope="props">
<div>
    <img :src="props.item.img"/>
    <span v-html="item.desc"></span>
</div>
</template>
</list>

要注意的是,插槽也會(huì)帶來一定的問題:Vue內(nèi)部檢測(cè)刷新的機(jī)制中,如果組件A中包含了插槽元素,子節(jié)點(diǎn)之類的,父組件更新的時(shí)候,該組件A會(huì)被強(qiáng)制更新。
如果組件A中render渲染比較耗時(shí)的話,要做多一層封裝;

如下(其中test是我們上面封裝好的組件)

<div id="app">
          <input type="text" v-model="name"/>
           <test :list="list" @hook:updated="testUpdated"><template scope="props"><span v-html="props.item.name"></span></template></test>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
              list:[{name:"123"},{name:"456"},{name:"789"}],
              name:"test"
        },
        methods:{
              testUpdated:function(){
                       console.log("d")
              }
        }
    })
</script>

在這里,每次修改input框值,都會(huì)觸發(fā)組件test的更新
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • vue概述 在官方文檔中,有一句話對(duì)Vue的定位說的很明確:Vue.js 的核心是一個(gè)允許采用簡(jiǎn)潔的模板語法來聲明...
    li4065閱讀 7,624評(píng)論 0 25
  • 探索Vue高階組件 高階組件(HOC)是 React 生態(tài)系統(tǒng)的常用詞匯,React 中代碼復(fù)用的主要方式就是使用...
    君惜丶閱讀 1,058評(píng)論 0 2
  • Test Vue.js Slots in Jest 測(cè)試Vue.js中的Slots插槽 Learn how to ...
    Revontulet閱讀 3,101評(píng)論 0 1
  • 【2019-3-4更新】Vue 2.6+修改了部分語法,對(duì)插槽的使用有了較多的更新。在本文中筆者在相應(yīng)位置給出了更...
    果汁涼茶丶閱讀 10,507評(píng)論 2 36
  • 喜怒憂愁疏散地, 二兩白濁盡興意。 心情本是由心起, 雜貨鋪里賣東西。 你的文采不錯(cuò),隨口的小詩竟然工整押韻。 你...
    暴走的毛尖閱讀 277評(píng)論 0 1

友情鏈接更多精彩內(nèi)容