關于插槽那點事

屬于每次面試都會被問到,懂但是不知道咋說那種(好吧,主要是我菜我不會),所以今天專門整理一下
我學一個新東西一般都是“3W1H”

What是什么

Vue 實現(xiàn)了一套內(nèi)容分發(fā)的 API破托,將<slot>元素作為承載分發(fā)內(nèi)容的出口。說白了slot就是個槽口就是個坑(此坑非彼坑)歧蒋,你在使用組件時可以拿內(nèi)容去填坑土砂,子組件在自己的模板中去渲染父組件傳遞過來的內(nèi)容。

Why 為什么用

豐富組件內(nèi)容和布局的靈活性谜洽,增強組件的擴展性和實用性萝映,讓用戶可以去更好地復用組件和對其做定制化處理

Where在哪用

其實知道了為什么用就大致知道了在哪用,這個沒有硬性要求阐虚。例如如果父組件在使用到一個復用組件的時候序臂,在不同的地方有少量的更改,這種情況沒有必要去重寫实束,此時我們就可以使用插槽奥秆。當然還需根據(jù)自己項目實際情況來,不做過多贅述

How怎么用

插槽分為三種:默認插槽咸灿、具名插槽以及作用域插槽
常規(guī)使用組件

//APP.vue
<my-slot></my-slot>

MySlot內(nèi)容

<p>this is start</p>
<p>this is end</p>

效果如下
effect1.png
  • 默認插槽:

父組件在子組件<slot> </slot>處插入內(nèi)容

<my-slot :name="name">
  <p>該我表演了</p>
</my-slot>

子組件:

<p>this is start</p>
  <slot></slot>
<p>this is end</p>

效果如下:
effect2.png

檢查代碼元素构订,發(fā)現(xiàn)以上代碼就相當于


element.png

有的小伙伴可能會問那它有沒有默認值呢,我們之前學過的很多東西都有默認值避矢,例如函數(shù)參數(shù)悼瘾,props,provide/inject等等审胸,答案是有的亥宿,我們直接在槽口里面寫入默認模版/代碼即可,如
//父組件
<my-slot></my-slot>
//子組件
<p>this is start</p>
    <slot><span> 如果你看到我砂沛,那我就是默認值烫扼,沒有人和我玩</span></slot>
<p>this is end</p>

效果
effect3.png

以上代碼就相當于
dmslot3.png

如果我們派發(fā)不止一個元素那將顯示哪個呢?第一個尺上?最后一個材蛛?還是所有
光說沒用,咱得試試
//父組件
<my-slot :name="name">
  <p>該我表演了</p>
  <span>瞅瞅</span>
  <button>click Me!  click Me!</button>
</my-slot>

效果:
effect4.png

如果我們有多個槽口呢怎抛?都顯示嗎卑吭?

//子組件
<p>this is start</p>
    <slot><span> 如果你看到我,那我就是默認值马绝,沒有人和我玩</span></slot>
    <slot><span> 如果你看到我豆赏,那我就是默認值,沒有人和我玩</span></slot>
    <slot><span> 如果你看到我,那我就是默認值掷邦,沒有人和我玩</span></slot>
<p>this is end</p>

效果:
effect5.png

那可不白胀,都顯示了呢
還有沒有問題,沒有問題我提了啊抚岗。如果我要指定某元素派發(fā)到某槽口呢或杠?例如剛剛你是發(fā)傳單,見人就發(fā)宣蔚,現(xiàn)在我只讓你發(fā)給穿黃衣服的人向抢。也就是我們現(xiàn)在要在父組件中,精確的在想要的位置胚委,插入對應的內(nèi)容呢挟鸠,這就引出了具名插槽

  • 具名插槽
    怎么樣能讓原有插槽成為具名插槽呢,倒也簡單亩冬,給插槽命一個名即可艘希,即添加name屬性。
//子組件
<p>this is start</p>
  <slot name="title"
    ><span> 如果你看到我硅急,那我就是默認值覆享,沒有人和我玩</span></slot
  >
  <slot name="con"
    ><span> 如果你看到我,那我就是默認值铜秆,沒有人和我玩</span></slot
  >
  <slot name="btn"
    ><span> 如果你看到我淹真,那我就是默認值,沒有人和我玩</span></slot
  >
<p>this is end</p>

父組件通過v-slot : name 的方式添加內(nèi)容:

<my-slot>
  <template v-slot:title>
    <p>該我表演了</p>
  </template>
  <template v-slot:con>
    <span>瞅瞅</span>
  </template>
  <template v-slot:btn> <button>click Me! click Me!</button> </template>
</my-slot>

注:為了方便连茧,書寫 v-slot:xx 的形式時,可以簡寫為 #xx巍糯。自己可以試試啸驯,我就不演示了
另外說一點插槽名也是有默認值的,默認值很默認祟峦,那就是default罚斗。。宅楞。例如

//子組件
<p>this is start</p>
  <slot name="title"
    ><span> 如果你看到我针姿,那我就是默認值,沒有人和我玩</span></slot
  >
  <slot name="con"
    ><span> 如果你看到我厌衙,那我就是默認值距淫,沒有人和我玩</span></slot
  >
  <slot><span> 如果你看到我,那我就是默認值婶希,沒有人和我玩</span></slot>
  <slot name="btn"
    ><span> 如果你看到我榕暇,那我就是默認值,沒有人和我玩</span></slot
  >
<p>this is end</p>

父組件:
1.png
  • 作用域插槽
    插槽和模版都有編譯作用域,父級模板里的所有內(nèi)容都是在父級作用域中編譯的彤枢;子模板里的所有內(nèi)容都是在子作用域中編譯的狰晚。父組件不能直接使用子組件內(nèi)的數(shù)據(jù),那怎么才能訪問子組件作用域缴啡,使用子組件的數(shù)據(jù)呢壁晒?我們把需要傳遞的內(nèi)容綁到 <slot> 上,然后在父組件中用v-slot設置一個值來接收我們傳遞過來的數(shù)據(jù):
//父組件
    <my-slot>
      <template #testdata="slotfirstProps">
        {{ slotfirstProps.value1 }}
      </template>

      <template #default="slotsecondProps">
        {{ slotsecondProps.value2 }}
      </template>
    </my-slot>
//子組件
  <div>
    <p>this is start</p>
    //d1业栅、d2都是我定義在data中的數(shù)據(jù)
    <slot name="testdata" :value1="d1"> 這就是默認值1</slot>
    <slot :value2="d2"> 這就是默認值2 </slot>
    <p>this is end</p>
  </div>

效果如下:
effect.png

鐺鐺鐺~完結撒花讨衣,如有不對歡迎指正。覺得有幫助的話記得點個贊哦

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末式镐,一起剝皮案震驚了整個濱河市反镇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娘汞,老刑警劉巖歹茶,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異你弦,居然都是意外死亡惊豺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門禽作,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尸昧,“玉大人,你說我怎么就攤上這事旷偿∨胨祝” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵萍程,是天一觀的道長幢妄。 經(jīng)常有香客問我,道長茫负,這世上最難降的妖魔是什么蕉鸳? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮忍法,結果婚禮上潮尝,老公的妹妹穿的比我還像新娘。我一直安慰自己饿序,他們只是感情好勉失,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗤堰,像睡著了一般戴质。 火紅的嫁衣襯著肌膚如雪度宦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天告匠,我揣著相機與錄音戈抄,去河邊找鬼。 笑死后专,一個胖子當著我的面吹牛划鸽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戚哎,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裸诽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了型凳?” 一聲冷哼從身側響起丈冬,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甘畅,沒想到半個月后埂蕊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡疏唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蓄氧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片槐脏。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡喉童,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顿天,到底是詐尸還是另有隱情堂氯,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布露氮,位于F島的核電站祖灰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畔规。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一恨统、第九天 我趴在偏房一處隱蔽的房頂上張望叁扫。 院中可真熱鬧,春花似錦畜埋、人聲如沸莫绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽对室。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掩宜,已是汗流浹背蔫骂。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牺汤,地道東北人辽旋。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像檐迟,于是被迫代替她去往敵國和親补胚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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

  • Vue 實現(xiàn)了一套內(nèi)容分發(fā)的 API追迟,由 元素作為承載分發(fā)內(nèi)容的出口溶其。 slot 首先說說slot vue里提...
    前端輝羽閱讀 916評論 0 8
  • vue里提供了一種將父組件的內(nèi)容和子組件的模板整合的方法:內(nèi)容分發(fā),通過slot插槽來實現(xiàn)敦间。 在組件標簽內(nèi)部寫入的...
    視覺派Pie閱讀 8,837評論 0 20
  • 前言 Vue中的插槽是一個非常強大的功能,在復用組件模塊的時候,針對相似的結構,擁有不通的內(nèi)容時,使用插槽就非常方...
    itclanCoder閱讀 1,392評論 0 1
  • 一瓶逃、什么是插槽? 在進行組件化開發(fā)時每瞒,通常會遇到同一個功能金闽,有共性的部分,也有不同的部分剿骨,此時我們就需要在子組件內(nèi)...
    Year_h閱讀 472評論 0 5
  • 本篇(可能此系列會包含很多篇)純屬從Vue官方文檔找來的內(nèi)容代芜,也可能會根據(jù)自身的知識情況擴展、延伸浓利、歸納挤庇,進行個性...
    爆發(fā)吧小宇宙閱讀 576評論 2 1