Как добавить резервный контент для слотов во 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