vue組件插槽

插槽(slot)是 vue 為組件的封裝者提供的能力。允許開發(fā)者在封裝組件時(shí),把不確定的、希望由用戶指定的部分定義為插槽??梢园巡宀壅J(rèn)為是組件封裝期間,為用戶預(yù)留的內(nèi)容的占位符。

插槽有三種:匿名插槽,具名插槽和作用域插槽

一、匿名插槽

示例:‘main組件’會(huì)每一個(gè)星期文本后插入,也就是預(yù)留的插槽位

    <div id="app">
       <main-box>星期一</main-box>
       <main-box>星期二</main-box>
       <main-box>星期三</main-box>
    </div>

    <script>
        Vue.component('mainBox',{
            template:`
                <div>
                    <p>main組件</p>
                    <slot></slot>
                </div>
            `
        })

        const app=new Vue({
            el:'#app',
            data:{
                
            },
            methods:{
                
            },
            mounted(){
                

            }
        })
    </script>

二、具名插槽

顧名思義,具名插槽就是給插槽一個(gè)名字
如果在封裝組件時(shí)需要預(yù)留多個(gè)插槽節(jié)點(diǎn),則需要為每個(gè) <slot> 插槽指定具體的name 名稱
示例:

    <div id="app">
       <main-box>
        <!-- template模板標(biāo)簽的順序不影響最終的現(xiàn)實(shí)順序 -->
        <!-- 
            指定模板標(biāo)簽插槽的兩種語法
            1.slot="插槽名"
            2.v-slot:插槽名
         -->
            <template slot="bottom">
                <h4>星期一</h4>
                <h5>星期二</h5>
            </template>
            <template slot="top">
                <h4>星期三</h4>
                <h5>星期四</h5>
            </template>
       </main-box>
    </div>

    <script>
        Vue.component('mainBox',{
            template:`
                <div class="box">
                    <p>main組件</p>
                    <slot name="top"></slot>
                    <slot name="bottom"></slot>
                </div>
            `
        })

        const app=new Vue({
            el:'#app',
            data:{
                
            },
            methods:{
                
            }
        })   
    </script>

三、作用域插槽

在封裝組件的過程中,可以為預(yù)留的 <slot> 插槽綁定props 數(shù)據(jù),這種帶有props 數(shù)據(jù)的 <slot> 叫做“作用域插槽”。
可以使用v-slot: 的形式,接收作用域插槽對外提供的數(shù)據(jù),
作用域插槽對外提供的數(shù)據(jù)對象,可以使用解構(gòu)賦值簡化數(shù)據(jù)的接收過程
示例:

    <div id="app">
        <box>
            <template v-slot="scope">
                <h3>嘗試使用box組件中的msg</h3>
                <h1>{{scope.abc}}</h1>
            </template>
        </box>
    </div>

    <script>
        Vue.component('box',{
            template:`
            <div class="box">
                <h3>title</h3>
                <slot :abc="msg"></slot>
            </div>
            `,
            data:function(){
                return {
                    msg:'box組件的msg'
                }
            }
        })

        const app=new Vue({
            el:'#app',
            data:{
                
            },
            methods:{
                
            }
        })       
    </script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 一、概要 插槽是指把任意內(nèi)容插入指定的位置,而這個(gè)位置使用``作為占位符簡單的來說就是在組件的某個(gè)節(jié)點(diǎn)內(nèi)預(yù)留一個(gè)位...
    唯老閱讀 870評論 0 0
  • Vue 實(shí)現(xiàn)了一套內(nèi)容分發(fā)的 API,由 元素作為承載分發(fā)內(nèi)容的出口。 slot 首先說說slot vue里提...
    前端輝羽閱讀 957評論 0 8
  • 編譯作用域 在vue組件中作用域簡單的說就是: 父組件模板的內(nèi)容在父組件的作用域內(nèi)編譯,子組件模板的內(nèi)容在子組件的...
    羊烊羴閱讀 1,667評論 0 1
  • slot 插槽 什么是solt(插槽)? 為了讓組件可以組合,我們需要一種方式來混合父組件的內(nèi)容與子組件自己的模板...
    Dec停云閱讀 218評論 0 0
  • 案例一 點(diǎn)亮星星 通過控制tempScore來控制鼠標(biāo)滑過離開的分?jǐn)?shù),當(dāng)點(diǎn)擊確定時(shí),score等于tempScor...
    skydot閱讀 374評論 0 0

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