Как добавить резервный контент для слотов во Vue?
Резервный контент (англ. fallback content) для слотов — это контент по умолчанию, который показывается внутри <slot>, если родитель не передал пользовательский контент для этого слота.
Default slot с резервным содержимым
<!-- ChildComponent.vue -->
<template>
<div class="card">
<slot>
<!-- Этот блок отобразится, если в Parent не передали содержимое -->
<p>Здесь будет текст по умолчанию для слота.</p>
</slot>
</div>
</template>
<!-- Parent.vue -->
<template>
<!-- без вложенного контента -->
<ChildComponent />
</template>
Note:
Поскольку в <ChildComponent> внутри <slot> есть <p>…</p>, оно и отобразится при отсутствии пользовательского контента.
Named slot с резервным содержимым
<!-- Layout.vue -->
<template>
<header>
<slot name="header">
<!-- fallback для шапки -->
<h1>Заголовок по умолчанию</h1>
</slot>
</header>
<main>
<slot>
<!-- fallback для основного контента -->
<p>Основной контент по умолчанию</p>
</slot>
</main>
</template>
<!-- Parent.vue -->
<template>
<Layout>
<!-- передаётся только footer -->
<template #footer>
<p>© 2025</p>
</template>
</Layout>
</template>
Note:
Если вы не указали <template #header>, то вместо шапки вы увидите <h1>Заголовок по умолчанию</h1>.
Шаги для добавления резервного контента
1. Вставьте контент внутрь тега slot
Внутри <slot> добавьте любые шаблонные элементы — они станут fallback.
2. Не объявляйте пустой слот
Не нужно писать <slot></slot>, без содержимого — в этом случае резервного контента не будет.
3. Используйте именованные слоты по необходимости
Для каждого <slot name="..."> можно отдельно указать fallback внутри тэга.
Note:
Фолбэк-контент отображается только при полной отсутствии содержимого для слота. Если передан пустой HTML (например, <template #default></template>), Vue считает слот заполненным и резервный контент не появится.
Для подробностей смотрите официальную документацию Vue: Default content for slots