Vue.js slot插槽的作用域插槽用法詳解
沒有插槽的情況
<div id="app">
<child>
<span>1111</span>
</child>
</div>
<script>
// 注冊(cè)子組件
Vue.component("child", {
template: "<div>這是一個(gè)div標(biāo)簽</div>"
});
// 初始化父組件
new Vue({
el: "#app"
});
</script>
模版里的 span標(biāo)簽 會(huì)被替代成 “<div>這是一個(gè)div標(biāo)簽</div>” 如下圖:

Vue2.x 插槽
有插槽的情況
簡(jiǎn)單來說,使用 slot標(biāo)簽 ,可以將<span>1111</span>,放到子組件中想讓他顯示的地方。如下圖:
<div id="app">
<child>
<span>1111</span>
</child>
</div>
<script>
// 注冊(cè)子組件
Vue.component("child", {
template: "<div>這是<slot></slot>一個(gè)div標(biāo)簽</div>"
});
// 初始化父組件
new Vue({
el: "#app"
});
</script>

即使有多個(gè)標(biāo)簽,會(huì)一起被插入,相當(dāng)于用父組件放在子組件里的標(biāo)簽,替換了<slot></slot>這個(gè)標(biāo)簽。如下圖:
<div id="app">
<child>
<span>1111</span>
<i>2222</i>
<b>3333</b>
</child>
</div>
<script>
// 注冊(cè)子組件
Vue.component("child", {
template: "<div>這是<slot></slot>一個(gè)div標(biāo)簽</div>"
});
// 初始化父組件
new Vue({
el: "#app"
});
</script>

具名插槽
- 父組件在要分發(fā)的標(biāo)簽里添加
slot="xxx"屬性 - 子組件在對(duì)應(yīng)分發(fā)的位置的
slot標(biāo)簽里,添加name="xxx"屬性 - 然后就會(huì)將對(duì)應(yīng)的標(biāo)簽放在對(duì)應(yīng)的位置了。如下圖:
<div id="app">
<child>
<span slot="one">1111</span>
<i slot="two">2222</i>
<b slot="three">3333</b>
</child>
</div>
<script>
// 注冊(cè)子組件
Vue.component("child", {
template: `<div>
這是
<slot name='one'></slot>
一個(gè)
<slot name='two'></slot>
div
<slot name='three'></slot>
標(biāo)簽
</div>`
});
// 初始化父組件
new Vue({
el: "#app"
});
</script>

沒有slot屬性
如果子組件標(biāo)簽中沒有slot屬性,將會(huì)顯示默認(rèn)的值
<div id="app">
<child>
<!-- <span slot="one">1111</span> -->
<i slot="two">2222</i>
<!-- <b slot="three">3333</b> -->
</child>
</div>
<script>
// 注冊(cè)子組件
Vue.component("child", {
template: `<div>
<slot name='one'>no one</slot>
<slot name='two'>no two</slot>
<slot name='three'>no three</slot>
</div>`
});
// 初始化父組件
new Vue({
el: "#app"
});
</script>
slot="two" 就被插到固定的位置上,如下圖:

插槽簡(jiǎn)單實(shí)例應(yīng)用
想想你的電腦主板上的各種插槽,有插CPU的,有插顯卡的,有插內(nèi)存的,有插硬盤的,所以假設(shè)有個(gè)組件是computer,其模板是template ,如下:
<body>
<div id="app">
<computer>
<div slot="CPU">Intel Core i7</div>
<div slot="GPU">GTX980Ti</div>
<div slot="Memory">Kingston 32G</div>
<div slot="Hard-drive">Samsung SSD 1T</div>
</computer>
</div>
<script>
// 注冊(cè)子組件
Vue.component("computer", {
template: `<div>
<slot name="CPU">這兒插你的CPU</slot>
<slot name="GPU">這兒插你的顯卡</slot>
<slot name="Memory">這兒插你的內(nèi)存</slot>
<slot name="Hard-drive">這兒插你的硬盤</slot>
</div>`
});
// 初始化父組件
new Vue({
el: "#app"
});
</script>
</body>

作用域插槽 ( 2.1.0 新增 )
作用域插槽是一種特殊類型的插槽,用作一個(gè) (能被傳遞數(shù)據(jù)的) 可重用模板,來代替已經(jīng)渲染好的元素。
- 在子組件中,只需將數(shù)據(jù)傳遞到插槽,就像你將 prop 傳遞給組件一樣
- 在父組件中,通過
slot-scope="scoped"的形式,獲取子組件傳遞過來的數(shù)據(jù),該數(shù)據(jù)對(duì)象的別名為scoped。這就是作用域插槽的模板。
<div id="app">
<child>
<!-- 2. 接收myName數(shù)據(jù),scoped 為 { "myName": "貓老板的豆" } -->
<template slot="content" slot-scope="scoped">
<div>{{ scoped.myName }}</div>
</template>
</child>
</div>
<script>
Vue.component('child', {
data () {
return {
myName: '貓老板的豆'
}
},
template: `<slot name="content" :myName="myName"></slot>` // 1. 對(duì)外拋出 myName 數(shù)據(jù)
})
new Vue({
el: "#app"
});
</script>
Vue3.x 插槽
插槽
<!-- 父組件 -->
<template>
<Child>
<!-- Vue2.x寫法
<div slot="parent">
<div>父組件</div>
</div>
-->
<template v-slot:parent>
<div>父組件</div>
</template>
</Child>
</template>
<!-- 子組件 -->
<template>
<slot name='parent'>子組件</slot>
</template>
作用域插槽
在 Vue2.x 中具名插槽和作用域插槽分別使用 slot 和 slot-scope 來實(shí)現(xiàn), 在 Vue3.x 中將 slot 和 slot-scope進(jìn)行了合并統(tǒng)一使用
父組件:
<template>
<Child>
<!-- <template slot="content" slot-scope="scoped"> -->
<template v-slot:content="scoped">
<div>{{scoped.myName}}</div>
</template>
</Child>
</template>
子組件:
<template>
<slot name="content" :myName="myName"></slot>
</template>
<script>
import { ref } from 'vue'
export default {
setup () {
let myName = ref("貓老板的豆")
return { myName }
},
}
</script>
到此這篇關(guān)于Vue.js slot插槽的作用域插槽用法詳解的文章就介紹到這了,更多相關(guān)Vue.js slot插槽的作用域插槽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
記錄一個(gè)van-list不斷onLoad加載的坑及解決
這篇文章主要介紹了記錄一個(gè)van-list不斷onLoad加載的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue項(xiàng)目用后端返回的文件流實(shí)現(xiàn)docx和pdf文件預(yù)覽
本文主要介紹了vue項(xiàng)目用后端返回的文件流實(shí)現(xiàn)docx和pdf文件預(yù)覽,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟
這篇文章給大家介紹了Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟,既然是部署到服務(wù)器,肯定是需要一個(gè)云的。具體思路步驟大家可以參考下本文2017-07-07
深入解析Vue源碼實(shí)例掛載與編譯流程實(shí)現(xiàn)思路詳解
這篇文章主要介紹了Vue源碼實(shí)例掛載與編譯流程實(shí)現(xiàn)思路詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
ant design vue 清空upload組件圖片緩存的問題
這篇文章主要介紹了ant design vue 清空upload組件圖片緩存的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

