vue中插槽整理及用法分析
本教程操作環(huán)境:windows7系統(tǒng)、vue2.9.6版,DELL G3電腦。
vue的插槽(slot)主要分三種:
默認(rèn)插槽,具名插槽,作用域插槽
vue中的插槽,指的是子組件中提供給父組件使用的一個占位符;
用標(biāo)簽表示,父組件可以在這個占位符中填充任何模板代碼,比如HTML、組件等,填充的內(nèi)容會替換掉子組件的標(biāo)簽(替換占位符)。
默認(rèn)插槽
默認(rèn)插槽是最簡單的一種插槽,和上面的描述一致,就是通過替換占位符達(dá)到在父組件中更改子組件中內(nèi)容的效果。
語法:
在子組件中放置一個占位符(slot):
<template>
<span>
<span>莎莎減肥</span>
<slot></slot>
</span>
</template>
<script>
export default {
name: 'chassList'
}
</script>
然后在父組件中引用這個子組件,并給這個占位符(slot)填充內(nèi)容:
<template>
<div>
<span>今天吃啥:</span>
<chassList>
<span>大嫂不讓莎莎吃飯</span>
</chassList>
</div>
</template>
這時頁面展現(xiàn)的內(nèi)容會是【今天吃啥:莎莎減肥大嫂不讓莎莎吃飯】。
具名插槽
比如在子組件中有兩個要替換占位符的地方(兩個slot),這時父組件如果要將相應(yīng)的內(nèi)容填充到相應(yīng)的插槽中,靠默認(rèn)插槽是沒有辦法判斷相應(yīng)的內(nèi)容要填充到哪個插槽中的。為了應(yīng)對這樣的場景,具名插槽應(yīng)運而生。
具名插槽,其實就是給子組件中的插槽取一個名字,而父組件就可以在引用子組件的時候,根據(jù)這個名字對號入座,將相應(yīng)內(nèi)容填充到相應(yīng)的插槽中。
語法:
在子組件中放置兩個具名插槽:
<template>
<div>
<span>第一個插槽</span>
<slot name="one"></slot>
<span>第二個插槽</span>
<slot name="two"></slot>
</div>
</template>
<script>
export default {
name: 'chassList'
}
</script>
在父組件中引用該子組件,并通過v-slot:[name]的方式將相應(yīng)的內(nèi)容填充到相應(yīng)的插槽中:
<template>
<div>
<span>兩個插槽:</span>
<chassList>
<template v-slot:one>
<span>one,</span>
</template>
<template v-slot:two>
<span>two</span>
</template>
</chassList>
</div>
</template>
這時頁面展示的內(nèi)容會是【兩個插槽:第一個插槽one,第二個插槽two】。
使用默認(rèn)插槽和具名插槽的注意事項
1.如果子組件中存在多個默認(rèn)插槽,那么父組件中所有指定到默認(rèn)插槽的填充內(nèi)容(未指定具名插槽),會全部填充到子組件的每個默認(rèn)插槽中。
2.即使在父組件中將具名插槽的填充順序打亂,只要具名插槽的名字對應(yīng)上了,填充的內(nèi)容就能被正確渲染到相應(yīng)的具名插槽中,一個蘿卜一個坑。
3.如果子組件中同時存在默認(rèn)插槽和具名插槽,但是在子組件中找不到父組件中指定的具名插槽,那么該內(nèi)容會被直接丟棄,而不會被填充到默認(rèn)插槽中。
作用域插槽
作用域插槽相比于前面的默認(rèn)插槽和具名插槽,會比較難于理解和運用。
- 前面的兩個插槽強調(diào)的是填充占位的【位置】;
- 作用域插槽強調(diào)的則是數(shù)據(jù)作用的【范圍】;
- 作用域插槽,就是帶參數(shù)(數(shù)據(jù))的插槽;
在子組件的插槽中帶入?yún)?shù)(數(shù)據(jù))提供給父組件使用,該參數(shù)(數(shù)據(jù))僅在插槽內(nèi)有效,父組件可以根據(jù)子組件中傳過來的插槽參數(shù)(數(shù)據(jù))對展示內(nèi)容進(jìn)行定制。
語法:
在子組件中放置一個帶參數(shù)(數(shù)據(jù))的插槽:
<template>
<div>
<span>插槽中的參數(shù)值是</span>
<slot :isAllwo="isAllwo"></slot>
</div>
</template>
<script>
export default {
name: 'classList',
data() {
return {
isAllwo: {
one: 'one',
two: 'two'
}
}
}
}
</script>
在父組件中引用該子組件,并通過slot-scope來接受子組件的插槽中傳過來的參數(shù)和使用該數(shù)據(jù)。
<template>
<div>
<span>作用域插槽:</span>
<classList>
<template slot-scope="isAllwo">
{{ isAllwo.isAllwo.one}}
</template>
</classList>
</div>
</template>
這時頁面展示的內(nèi)容會是【作用域插槽:插槽中參數(shù)值是one】。
因為在template的{{}}是支持表達(dá)式的,這個時候就可以利用子組件傳過來的參數(shù)值的不同進(jìn)行頁面內(nèi)容的定制。
<template>
<div>
<span>作用域插槽:</span>
<classList>
<template slot-scope="isAllwo">
{{ isAllwo.isAllwo.one|| '空值' }}
</template>
</classList>
</div>
</template>
這時,如果子組件中傳過來的參數(shù)是空值,頁面的展示內(nèi)容就會是【作用域插槽:插槽中參數(shù)值是空值】。
作用域插槽的使用場景多種多樣,在各種框架中的應(yīng)用也是十分廣泛,比如ElementUI中的對表格的某一行或某一列進(jìn)行展示內(nèi)容的定制,就是作用域插槽的一個典型應(yīng)用場景。
到此這篇關(guān)于vue中插槽整理及用法分析的文章就介紹到這了,更多相關(guān)vue中有幾種插槽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用vite構(gòu)建vue3項目的實現(xiàn)步驟
通過本文,您可以了解如何使用Vue CLI創(chuàng)建Vue 3項目,配置Vite,利用其優(yōu)勢進(jìn)行開發(fā),具有一定的參考價值,感興趣的可以了解一下2023-08-08
Vue2.0仿餓了么webapp單頁面應(yīng)用詳細(xì)步驟
本篇文章給大家分享了Vue2.0仿餓了么webapp單頁面應(yīng)用詳細(xì)步驟,有興趣的朋友可以跟著操作下。2018-07-07

