如何理解vue的slot

2021-08-04 08:13:10 字數 1954 閱讀 1046

插槽(slot)是vue提出來的乙個概念,正如名字一樣,插槽用於決定將所攜帶的內容,插入到指定的某個位置,從而使模板分塊,具有模組化的特質和更大的重用性。插槽的原理和angular中的ng-transclude十分類似,本篇也是對所學內容做乙個梳理。

形式上看,slot的設計對應了angular中的ng-tranclude屬性,即用該方法來確定在何處放置嵌入部分。

1.ng-transclude使用

html內容

}my-msg>

模版內容

here comes the message.p>

ng-transclude>

div>

div>

渲染結果

here comes the message.p>

}div>

2.slot的使用

匿名slot

舉個栗子,在vue中,我們會這麼寫帶slot的元件:

子元件模板

我是子元件的標題h2>

slot> /*這裡插入父元件在引用子元件內部的內容*/

div>

父元件模板

我是父元件的標題h1>

這是一些初始內容p>

這是更多的初始內容p>

my-component>

div>

渲染結構

我是父元件的標題h1>

我是子元件的標題h2>

這是一些初始內容p>

這是更多的初始內容p>

div>

div>

對比一下,是不是和ng-transclude十分類似?slot所做的工作,也是把父元件中的「內容」被放入了slot,並將組合後的元件模版返回到父元件。這裡slot標籤裡的內容實際並沒有顯示,被當作了備用內容(只有在宿主元素為空,沒有要插入的內容時才顯示)。

更進一步地,vue給出了具名slot也作用域插槽這兩個比較獨特的設計。

具名slot

上面栗子中使用的是匿名slot,即該節點不攜帶任何其也特徵資訊。對應的,vue也提供了具名slot。簡單來講,具名slot就是會為模板中不同部分指定相應的插入位置。但是當部分內容沒有找到對應的插入位置,就會依次插入匿名的slot中,當沒有找到匿名slot時,這段內容就會被拋棄掉。
子元件模版

name="header">

slot>

name="footer">

slot>

slot>

div>

父元件模板

lack of anonymous slot, this paragraph will not shown.p>

slot="footer">here comes the footer contentp>

slot="header">here comes the header contentp>

my-component>

渲染結果

here comes the header contentp>

here comes the footer contentp>

lack of anonymous slot, this paragraph will not shown.p>

div>

Vue 插槽(slot)的理解

父元件向子元件傳值我們會一般用到props,那傳遞乙個dom節點呢?使用插槽slot,能高效地解決父元件向子元件插入dom節點問題。插槽 在vue中,可以在元件內部定義乙個或多個插槽,子元件決定插槽的位置,也可以設定預設的資訊,父元件在插槽裡插入資訊,有預設資訊時,父元件不插入資訊,則顯示子元件的預...

vue中的插槽slot理解

本篇文章參考賽冷思的個人部落格 1.函式預設傳參 在我們寫js函式我們的可能會給他們乙個預設的引數,寫法是 function show age,name show 20,張三 show 18,命名 18,明明 如果使用者不傳入引數,那麼會輸出預設值,如果使用者傳入,會輸出傳入的值,這種寫法很靈活 v...

Vue中slot初理解

初步理解 hello world 在元件標籤child中的span標籤會被元件模板template內容替換掉,當想讓元件標籤child中內容傳遞給元件時需要使用slot插槽 就是在元件裡 佔坑 在元件模板中佔好了位置,當使用該元件標籤時候,元件標籤裡面的內容就會自動填坑 替換元件模板中位置 當插槽也...