在Vue中,slot(槽)用于在組件中插入內容,使得組件更加靈活和通用。一個組件中可以有多個slot,每個slot可以有默認的內容,也可以使用具名的slot讓外部組件決定要插入的內容。
<template>
<div>
<header>
<slot name="header">默認的頭部</slot>
</header>
<main>
<slot>默認的主體內容</slot>
</main>
<footer>
<slot name="footer">默認的底部</slot>
</footer>
</div>
</template>
在這個示例中,我們定義了三個slot,通過給slot添加name屬性來變為具名的slot。當被使用時,可以在組件外部傳入對應name的內容,如果沒有傳入,則默認展示slot中的內容。
在使用slot時,還可以接收傳入的數據,通過slot-scope來實現。示例代碼如下:
<template>
<div>
<ul>
<slot name="list" v-for="item in list">
<li>{{ item.name }}</li>
</slot>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
list: [
{name: 'item1'},
{name: 'item2'},
{name: 'item3'}
]
}
}
}
</script>
在這個示例中,我們定義了一個具名的slot,使用v-for循環展示傳入的list數組中的每一項。在外部使用時,需要使用v-slot指令來傳入數據:
<template>
<div>
<slot-demo>
<template v-slot:list="props">
<li>{{ props.item.name }}</li>
</template>
</slot-demo>
</div>
</template>
<script>
import SlotDemo from './SlotDemo.vue';
export default {
components: {
SlotDemo
}
}
</script>
在這個示例中,我們使用了SlotDemo組件,并定義了具名的slot。通過v-slot:list="props",我們可以獲取到傳入的數據props,這里的list對應之前定義的name為list的slot。然后我們使用props.item來獲取到每一項的數據進行展示。