В библиотеке Element Plus слоты используются для передачи контента внутрь компонентов, позволяя гибко настраивать их отображение. Каждый слот представляет собой область, куда можно вставлять HTML, Vue-компоненты или динамический контент, не изменяя внутреннюю логику компонента.
Типы слотов:
Простейший вариант использования слотов — это передача содержимого по умолчанию:
<el-card>
<p>Содержимое карточки через default slot</p>
</el-card>
В этом примере тег <p> вставляется в основной слот
компонента el-card. Default slot позволяет
добавлять текст, HTML и другие Vue-компоненты.
Именованные слоты позволяют управлять конкретными частями компонента, задавая разные области для вставки контента. Синтаксис следующий:
<el-dialog :visible.sync="dialogVisible">
<template #header>
<span>Заголовок диалога</span>
</template>
<p>Основное содержимое диалога</p>
<template #footer>
<el-button @click="dialogVisible = false">Закрыть</el-button>
</template>
</el-dialog>
Здесь используются слоты:
header – для заголовка диалога.footer – для нижней панели с кнопками.<p>Основное содержимое диалога</p>) – для тела
диалога.Особенности именованных слотов:
#slotName или старый синтаксис
<template v-slot:slotName>.Scoped slots дают доступ к данным внутреннего компонента через объект
slotProps. Это мощный инструмент для динамического
отображения информации:
<el-table :data="tableData">
<el-table-column prop="name" label="Имя">
<template #default="{ row }">
<strong>{{ row.name }}</strong>
</template>
</el-table-column>
</el-table>
Здесь:
{ row } – объект, переданный из
el-table-column, доступный внутри
слота.Преимущества scoped slots:
В Element Plus можно создавать слоты динамически через циклы и условия:
<el-tabs v-model="activeName">
<el-tab-pane
v-for="tab in tabs"
:key="tab.name"
:label="tab.label"
:name="tab.name"
>
<template #default>
<p>{{ tab.content }}</p>
</template>
</el-tab-pane>
</el-tabs>
Здесь:
tabs.Element Plus позволяет объединять именованные и scoped слоты для сложных компонентов:
<el-form :model="form">
<el-form-item label="Имя">
<template #default="{ form }">
<el-input v-model="form.name"></el-input>
</template>
</el-form-item>
</el-form>
default используется для замены
стандартного поля ввода.form, что
упрощает двустороннюю привязку данных.Некоторые компоненты библиотеки предоставляют предопределённые слоты для удобного кастомного оформления:
el-dropdown – слот
dropdown для кастомного меню.el-select – слоты prefix
и suffix для вставки иконок или кнопок.el-table – слот empty для
отображения кастомного сообщения при пустых данных.Пример использования слота empty:
<el-table :data="[]">
<template #empty>
<div>Данные отсутствуют</div>
</template>
</el-table>
Слоты в Element Plus обеспечивают мощный и гибкий способ кастомизации компонентов. Понимание их типов, возможностей scoped слотов и динамических шаблонов позволяет создавать интерфейсы, легко поддерживаемые и расширяемые, без изменения внутренней логики компонентов.