Директива v-slot Vue3
v-slotДиректива используется для обозначения именованных слотов или слотов с ограниченной областью видимости, для распределения содержимого между компонентами.
Базовое описание
v-slotДиректива используется для предоставления содержимого слотам или получения пропсов, переданных слотами. Это основной способ реализации распределения содержимого компонентов во Vue.
- Сокращение: #
- Ожидаемый типВыражение JavaScript (необязательно, требуется только при получении пропсов)
- ФункцияОбозначает именованные слоты или слоты с ограниченной областью видимости.
Базовое использование
1. Именованные слоты
Пример
<template>
<base-layout>
<template v-slot:header>
<h1>Заголовок страницы</h1>
</template>
<template v-slot:default>
<p>Область основного содержимого</p>
</template>
<template v-slot:footer>
<p>Информация в нижнем колонтитуле</p>
</template>
</base-layout>
</template>
<base-layout>
<template v-slot:header>
<h1>Заголовок страницы</h1>
</template>
<template v-slot:default>
<p>Область основного содержимого</p>
</template>
<template v-slot:footer>
<p>Информация в нижнем колонтитуле</p>
</template>
</base-layout>
</template>
2. Сокращённая форма
Пример
<!-- Эквивалентно -->
<template v-slot:header>Заголовок</template>
<template #header>Заголовок</template>
<template v-slot:header>Заголовок</template>
<template #header>Заголовок</template>
3. Слоты с ограниченной областью видимости
Слоты с ограниченной областью видимости позволяют дочерним компонентам передавать данные родительским компонентам:
Пример
<!-- Родительский компонент -->
<template>
<current-user v-slot="slotProps">
<p>Имя пользователя: {{ slotProps.user.name }}</p>
</current-user>
</template>
<script>
export default {
components: { CurrentUser }
}
</script>
<!-- Дочерний компонент CurrentUser.vue -->
<template>
<slot :user="currentUser"></slot>
</template>
<script>
export default {
data() {
return {
currentUser: { name: 'Zhang San' }
}
}
}
</script>
<template>
<current-user v-slot="slotProps">
<p>Имя пользователя: {{ slotProps.user.name }}</p>
</current-user>
</template>
<script>
export default {
components: { CurrentUser }
}
</script>
<!-- Дочерний компонент CurrentUser.vue -->
<template>
<slot :user="currentUser"></slot>
</template>
<script>
export default {
data() {
return {
currentUser: { name: 'Zhang San' }
}
}
}
</script>
Другие расширения
Встроенные директивы Vue3