原始地址:https://segmentfault.com/a/1190000012996217
插槽:slot,是組件的一塊HTML模板,這塊模板顯示不顯示、以及怎樣顯示由 父組件來決定。 實際上,一個slot最核心的兩個問題這里就點出來了,是顯示不顯示和怎樣顯示。
顯不顯示和怎樣能夠顯示由父組決定
非插槽模板指的是html模板,指的是‘div、span、ul、table’這些,非插槽模板的顯示與隱藏以及怎樣顯示由插件自身控制;
插槽模板是slot,它是一個空殼子,因為它顯示與隱藏以及最后用什么樣的html模板顯示由父組件控制。但是插槽顯示的位置確由子組件自身決定,slot寫在組件template的哪塊,父組件傳過來的模板將來就顯示在哪塊。
自己的話講:非插槽模板,自己決定自己顯示,插槽:父級決定子級顯示;
一,單個插槽:沒有name屬性。一個組件只能用一次,slot 沒有name又叫匿名插槽。
匿名插槽,子組件被引入父組件的時候,被父組件使用了,子組件需要一個<slot/>來占位,有名字的占位,叫具名插槽
例如:子組件:<slot></slot>
父組件:<chlid>
<div>999999</div> //div的內容代替了子組件的匿名插槽 【父組件<div>999999</div> ===子組件<slot></slot>】
</child>
自己話說:<slot></slot>在子組件中,在父組件中的子組件中顯示,但仍然屬於子組件。單純的占個位置slot
二,具名插槽:有name屬性,一個頁面你可以使用多次,只要名字不同就行了,slot 加了name屬性,就叫具名插槽;
父組件通過html模板上的slot屬性關聯具名插槽。沒有slot屬性的html模板默認關聯匿名插槽。
父組件:<div slot="up">
<span>菜單1</span>
<span>菜單2</span>
<span>菜單3</span>
</div>
子組件: <slot name='up'></slot>
作用域插槽:子組件通過屬性<slot :自定義屬性名=‘值’></slot>,將自己內部的原始類型給到父組件;
父組件<template slote-scope='自定義接收'></template> 共同點是由slot這個單詞
子組件 slot 除了要占個位置還要傳遞參數,父組件slote-scope負責接收參數。