Slots
Dynamic Slot Names
Vue allows dynamic slot names using v-slot:
<template v-slot:[dynamicSlotName]>
<!-- content for the dynamic slot -->
</template>Scoped Slots
Scoped slots allow passing data from the parent to the slot content. Use v-slot to receive and utilize slot props:
<MyComponent v-slot="{ text, count }">
{{ text }} {{ count }}
</MyComponent>Named Scoped Slots
Named scoped slots enable multiple slots in a component. Pass props to named slots:
<MyComponent>
<template #header="headerProps">
{{ headerProps }}
</template>
</MyComponent>Fancy List Example
Scoped slots are handy for components like <FancyList>, letting the parent control item styling:
<FancyList>
<template #item="{ body, username, likes }">
<div class="item">
<p>{{ body }}</p>
<p>by {{ username }} | {{ likes }} likes</p>
</div>
</template>
</FancyList>Renderless Components
Renderless components encapsulate logic without rendering. They use scoped slots for visual output:
<MouseTracker v-slot="{ x, y }">
Mouse is at: {{ x }}, {{ y }}
</MouseTracker>Fallthrough attributes and scoped slots enhance Vue component flexibility, providing powerful tools for customization.
Last updated