在vue開發中,我們多採用元件化開發。元件化開發最大特點就是對頁面結構化劃分,元件的復用。而在實際中,頁面對元件的需求或許也稍有不同,那麼就需要一種需求:為頁面定製元件,解決的方式便是通過插槽。
例項:
執行上面**結果:
描述:頁面使用多個自定義元件(樣式**略),序號為方便敘述新增的且每個序號指向乙個自定義元件。該元件在建立之初就已經設計好了樣式和內容,所以在不同頁面呼叫或在同一頁面呼叫多次,其樣式內容都是一樣的。
需求:希望2號元件的內容展示為乙個按鈕,3號元件內容展示為乙個鏈結。
解決方式:或許首先想到重寫乙個符合需求的2號元件和3號元件,但這樣明顯很麻煩,而且**過於冗餘。這裡就引用插槽來解決。
**展示:
按鈕鏈結
執行結果:
通過在定義元件中將需要按需改變的部分用slot標籤代替,而後在使用元件時將需要的元素新增進來,最後在渲染時該元素會替帶模板中的slot,以上也是插槽最基礎的應用方式。
插槽,也就是槽,是元件的一塊html模板,這塊模板顯示不顯示,以及怎樣顯示由父元件來決定。
預設插槽,也叫單個插槽、匿名插槽。它可以放在元件的任何位置,但乙個元件中只能包含乙個預設插槽,且不設定它的name屬性。
引言中的例項所使用的便是預設插槽。預設插槽除了上面展示的基礎使用方式外,還可以為插槽定義預設值,所以之前**也可以這樣寫:
按鈕鏈結
另外一點就是,之前所展示的元件中都只含有乙個元素,但其實元件內部可以寫入多個元素,之後統一替換模板中的插槽。
具名插槽,很容易理解就是為匿名插槽新增乙個name屬性即可。而且具名插槽可以在乙個元件**現多次,且可以出現在任何位置。
理解為什麼要有具名插槽:
例項: 執行下面**(樣式略)
首部部分
內容部分
尾部部分
執行結果:
可以看出在插槽中我們引入了三部分,如果有三個頁面剛好需要分別修改這三部分(比如:將中文改為英文)。如果僅僅依靠單個插槽那麼我們就需要寫三份類似的**,且都包含其他兩個不需要修改的部分的**,又會引起**冗餘。所以需要一種方式僅僅來修改需要改變的部分。這裡就可以通過具名插槽的方式進行修改。
修改:在定義元件引入插槽時,為每一部分新增乙個帶有name屬性的插槽。
首部部分
內容部分
尾部部分
有了具名插槽,在之後頁面修改時,可以根據name屬性,進行指定部分的修改。
the content part
the tail section
執行結果:為簡便,這裡只在同一元件例項下進行多次引用,並未在多個頁面進行引用,但其用法和產生結果都是一樣的。
作用域插槽,是父元件替換插槽標籤,子元件決定顯示內容。
理解作用域插槽:
例項:現有父子元件,子元件有一組資料資料,根據頁面不同要求,希望子元件的資料分別以列表形式展示和水平方向展示。
注:在此vm例項可以理解為乙個父元件,所以根據vue例項建立出來的全域性元件就當作vm的子元件使用。
父元件這裡根據需求設定資料展示的樣式。
// 父元件部分
}
子元件部分進行資料繫結。
// 子元件部分
執行結果展示:
根據例項過程,可以理解作用域插槽,因為父元件在進行樣式設定時,無法直接訪問子元件資料,通過引入插槽物件,這個物件在子元件定義時與子元件資料進行了繫結,使得之後在使用時可以訪問到我們所需要的資料。
Vue中插槽的理解
插槽,也就是slot,在vue中的作用相當於乙個模板,通過父元件裡的這個模板,就能決定子元件裡使用這個模板的時候,顯不顯示,顯示什麼,怎麼顯示。首先來個簡單的例子 合成元件 yangp child child裡的模板 hellop slot div 顯示的效果 插槽裡可以包含任何模板 包括html,...
例項理解Vue的插槽
先準備乙個情景,你需要用到第三方的元件,比如antd的 預設情況下表頭和內容都是簡單資料,單元格也無法合併,只有基礎的樣式。可能會有一些api可以對 進行簡單的裝飾,比如bordered給 增加邊框size middle 設定 大小,但是依舊是乙個非常簡單的 的列規定了用column實現,內容必須是...
Vue 插槽(slot)的理解
父元件向子元件傳值我們會一般用到props,那傳遞乙個dom節點呢?使用插槽slot,能高效地解決父元件向子元件插入dom節點問題。插槽 在vue中,可以在元件內部定義乙個或多個插槽,子元件決定插槽的位置,也可以設定預設的資訊,父元件在插槽裡插入資訊,有預設資訊時,父元件不插入資訊,則顯示子元件的預...