vue中插槽(slot)幾種類型的使用方法
前言
vue的slot主要分三種,默認插槽,具名插槽,作用域插槽;使用插槽是在存在父子關(guān)系的組件中使用,我們可以在子組件中決定插槽的位置,同時子組件也可以給這些插槽的默認信息,當(dāng)父組件中沒有需要給子組件插槽插入信息時,顯示的是子組件插槽定義的默認信息,下邊簡單說下vue這三種插槽如何使用。
準備工作
很簡單,就創(chuàng)建父組件testSlot.vue,子組件children.vue,并在testSlot組件中注冊引入children組件。
一 默認插槽的使用:
默認插槽:
在子組件中定義一個默認插槽:
在開發(fā)中我們經(jīng)常使用到組件之間的傳值,但很多情況涉及到的都是數(shù)據(jù)屬性的傳值,比如父組件將msg傳給子組件:
現(xiàn)在如果是這種情況:
如果子組件中沒有使用插槽的情況下:
瀏覽器中的頁面,父組件中的p標簽的內(nèi)容是不會還給子組件的:
這時候,想讓父組件定義的p標簽傳給子組件并顯示,可以在子組件中定義一個默認插槽:
在子組件中,你也可以定義多個默認插槽,并在子組件中決定這些默認插槽的位置,父組件要插入的內(nèi)容,都會被填充到這些默認的插槽中:
當(dāng)然,父組件定義要插入到子組件的插槽的內(nèi)容,并不一定只有是dom結(jié)構(gòu)類型的,也可以是一個組件,也可以是普通的數(shù)據(jù)結(jié)構(gòu),只要子組件有定義插槽,就會把內(nèi)容填充進去。
二 具名插槽的使用:
具名插槽:
vue 2.6.0 版本使用具名插槽和作用域插槽有了新的統(tǒng)一語法,使用v-slot替換了之前的slot和slot-scope
什么叫具名插槽?
其實就是在子組件中定義插槽時,給對應(yīng)的插槽分別起個名字,方便后邊插入父組件將內(nèi)容根據(jù)name來填充對應(yīng)的內(nèi)容。
子組件中,定義兩個具名插槽:
父組件中:
為了驗證,子組件中的插槽可以填充任何結(jié)構(gòu)的內(nèi)容,所以我這邊專門在one_slot插槽中插入一個組件,而在two插槽就單純插入一串普通的數(shù)據(jù)
頁面結(jié)果:
當(dāng)然,子組件可以定義多個同名的具名插槽:
三 作用域插槽:
作用域插槽:<slot :自定義name=data中的屬性或?qū)ο?gt;
通過上邊的默認插槽和具名插槽的使用過程中,發(fā)現(xiàn),基本都是父組件中決定要插入到子組件中的內(nèi)容,而子組件自行決定插槽的位置。
具名插槽,就是實現(xiàn)在子組件中自行決定自己要顯示什么內(nèi)容。
子組件:
父組件:
這種時候有一種情況需要注意:
如果子組件中只有一個作用域插槽時,父組件可以使用下邊這種簡單的寫法,當(dāng)然規(guī)范點還是加上template模板標簽好點:
頁面效果:
但是當(dāng)子組件中有多個作用域插槽時,不建議上邊這種簡單的寫法,因為可能會出現(xiàn)作用域不明確的問題。
子組件有多個作用域插槽時:
父組件使用這種規(guī)范的寫法,可以避免有時作用域不明確問題:
到此這篇關(guān)于vue中插槽(slot)幾種類型的使用方法的文章就介紹到這了,更多相關(guān)vue 插槽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Vue2.0 watch對象屬性變化監(jiān)聽不到的問題
今天小編就為大家分享一篇解決Vue2.0 watch對象屬性變化監(jiān)聽不到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue.js實現(xiàn)一個自定義分頁組件vue-paginaiton
這篇文章主要為大家詳細介紹了Vue.js實現(xiàn)一個自定義分頁組件vue-paginaiton的具體代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09解決vue.js在編寫過程中出現(xiàn)空格不規(guī)范報錯的問題
下面小編就為大家?guī)硪黄鉀Qvue.js在編寫過程中出現(xiàn)空格不規(guī)范報錯的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09Vue3項目實現(xiàn)前端導(dǎo)出Excel的示例代碼
這篇文章主要介紹了Vue3項目實現(xiàn)前端導(dǎo)出Excel的示例,在vue3的項目中導(dǎo)出Excel表格的功能,可以借助xlsx庫來實現(xiàn),下面是詳細的操作步驟,需要的朋友可以參考下2025-01-01