slot插槽

一、為什么要使用插槽

在生活中,電腦的USB接口對應不同的設備就提供不同的功能油讯,可以接鍵盤秩伞、鼠標、音響饮睬、U盤……
在組件中租谈,slot的使用可以讓封裝的組件更有擴展性。
使用者可以根據(jù)需要修改組件割去。
比如一個搜索框組件昼丑,因為藍色組件中會變成店鋪,所以在封裝搜索框組件時矾克,就將這個容易變動的部分放在插槽中页慷,使用者可以根據(jù)需要修改插槽部分酒繁。


image.png

二、slot的基本使用

1.在子組件中用slot標簽開啟一個插槽


image.png
        <div id="app">
            <cpn></cpn>
        </div>
        <template id="cpn">
            <h2>固定展示部分</h2>
            <slot>
                <h2>可以變動的部分</h2>
            </slot>
        </template>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            const app = new Vue({
                el: '#app',
                components: {
                    cpn: {
                        template: '#cpn'
                    }
                }
            })
        </script>

2.在父組件中修改slot

        <div id="app">
            <cpn></cpn>
            <cpn>
                <h2>代替插槽部分</h2>
                <p>我也是代替插槽的部分</p>
            </cpn>
        </div>

父組件若不修改slot,則slot部分由子組件決定默認展示州袒。
父組件修改slot郎哭,則修改的內(nèi)容會覆蓋子組件slot的內(nèi)容菇存。


image.png

二依鸥、具名插槽slot

當子組件的功能增多時,一個組件中不只設置了一個插槽絮供,那父組件想修改特定的插槽部分時茶敏,如何指定其中的一個插槽修改惊搏。這時就要給插槽取個名字做標識胀屿。

        <div id="app">
            <cpn></cpn>
            <cpn>
                <template v-slot:left>
                    <p>修改left</p>
                </template>
                <template v-slot:default>
                    <p>修改center</p>
                </template>
                <template v-slot:footer>
                    <p>修改footer</p>
                </template>
            </cpn>
        </div>
        <template id="cpn">
            <div>
                <slot name="left">
                    <p>top部分</p>
                </slot>
                <slot>
                    <p>center部分</p>
                </slot>
                <slot name="right">
                    <p>footer部分</p>
                </slot>             
            </div>
        </template>     
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            const app = new Vue({
                el: '#app',
                components: {
                    cpn: {
                        template: '#cpn'
                    }
                }
            })
        </script>

在子組件中利用slot標簽的name屬性宿崭,給各自的slot標記id
父組件在template標簽中葡兑,利用v-slot的指令讹堤,并給v-slot指令指定屬性值(子組件的name),從而修改并覆蓋子組件中的slot
注意:子組件中默認slot的name是default疑务。


image.png

三、作用域插槽

父組件想要使用子組件中的數(shù)據(jù)温鸽,除了$emit()涤垫,作用域插槽也提供了方法竟终。

        <div id="app">
            <cpn>
                <template v-slot:center="slotProps">
                    <p>{{slotProps.message}}</p>
                </template>
            </cpn>
        </div>
        <template id="cpn">
            <div>
                <slot name="left">
                    <p>top部分</p>
                </slot>
                <slot name="center" :message="message">
                    <p>center部分</p>
                </slot>
                <slot name="right">
                    <p>footer部分</p>
                </slot>             
            </div>
        </template>     
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            const app = new Vue({
                el: '#app',
                components: {
                    cpn: {
                        template: '#cpn',
                        data(){
                            return {
                                message:'子組件的數(shù)據(jù)'
                            }
                        }
                    }
                }
            })
        </script>

子組件中的center插槽通過v-bind指令榆芦,將子組件中的message綁定到slot上

                <slot name="center" :message="message">
                    <p>center部分</p>
                </slot>

slot上的數(shù)據(jù)被收集到slotProps中歧杏,父組件就可以使用slotProps獲取子組件的message數(shù)據(jù)犬绒。


image.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市礼华,隨后出現(xiàn)的幾起案子圣絮,更是在濱河造成了極大的恐慌扮匠,老刑警劉巖棒搜,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克蚂,死亡現(xiàn)場離奇詭異,居然都是意外死亡翠拣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欣范,“玉大人恼琼,你說我怎么就攤上這事晴竞∝溃” “怎么了行嗤?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵堂鲜,是天一觀的道長甫恩。 經(jīng)常有香客問我磺箕,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上苛让,老公的妹妹穿的比我還像新娘。我一直安慰自己宇色,他們只是感情好例隆,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布镰禾。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上易阳,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天徐勃,我揣著相機與錄音很魂,去河邊找鬼遏匆。 笑死凡纳,一個胖子當著我的面吹牛荐糜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播答渔,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼芜飘,長吁一口氣:“原來是場噩夢啊……” “哼笼沥!你這毒婦竟也來了裙戏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤壹罚,失蹤者是張志新(化名)和其女友劉穎赂蠢,沒想到半個月后玖院,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年褐健,在試婚紗的時候發(fā)現(xiàn)自己被綠了倘屹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽匙。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喷舀,到底是詐尸還是另有隱情樊卓,我是刑警寧澤碌尔,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站咱士,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弛房。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一涩澡、第九天 我趴在偏房一處隱蔽的房頂上張望射富。 院中可真熱鬧胰耗,春花似錦拖陆、人聲如沸依啰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钝侠。三九已至,卻和暖如春忽舟,著一層夾襖步出監(jiān)牢的瞬間泣特,已是汗流浹背群扶。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工骆莹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幕垦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓比驻,卻偏偏與公主長得像狈茉,于是被迫代替她去往敵國和親蹭秋。 傳聞我的和親對象是個殘疾皇子感凤,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349