Directiva v-slot de Vue3
v-slotLa directiva se utiliza para representar slots con nombre o slots de alcance, para la distribución de contenido entre componentes.
Descripción básica
v-slotLa directiva se utiliza para proporcionar contenido a los slots o recibir las props que pasan los slots. Es la forma principal de implementar la distribución de contenido entre componentes en Vue.
- Forma abreviada: #
- Tipo esperado: Expresión de JavaScript (opcional, solo se necesita al recibir props)
- Función: Representa un slot con nombre o un slot de alcance.
Uso básico
1. Slots con nombre
Ejemplo
<template>
<base-layout>
<template v-slot:header>
<h1>Título de la página</h1>
</template>
<template v-slot:default>
<p>Área de contenido principal</p>
</template>
<template v-slot:footer>
<p>Información del pie de página</p>
</template>
</base-layout>
</template>
<base-layout>
<template v-slot:header>
<h1>Título de la página</h1>
</template>
<template v-slot:default>
<p>Área de contenido principal</p>
</template>
<template v-slot:footer>
<p>Información del pie de página</p>
</template>
</base-layout>
</template>
2. Forma abreviada
Ejemplo
<!-- Equivalente -->
<template v-slot:header>Título</template>
<template #header>Título</template>
<template v-slot:header>Título</template>
<template #header>Título</template>
3. Slots de alcance
Los slots de alcance permiten que un componente hijo pase datos al componente padre:
Ejemplo
<!-- Componente padre -->
<template>
<current-user v-slot="slotProps">
<p>Nombre de usuario: {{ slotProps.user.name }}</p>
</current-user>
</template>
<script>
export default {
components: { CurrentUser }
}
</script>
<!-- Componente hijo 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>Nombre de usuario: {{ slotProps.user.name }}</p>
</current-user>
</template>
<script>
export default {
components: { CurrentUser }
}
</script>
<!-- Componente hijo CurrentUser.vue -->
<template>
<slot :user="currentUser"></slot>
</template>
<script>
export default {
data() {
return {
currentUser: { name: 'Zhang San' }
}
}
}
</script>
Otras extensiones
Directivas integradas de Vue3