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