Directive v-slot de Vue3
v-slotLa directive est utilisée pour désigner des slots nommés ou des slots à portée, pour la distribution du contenu entre les composants.
Description de base
v-slotLa directive est utilisée pour fournir du contenu aux slots ou recevoir les props transmises par les slots. C'est la méthode essentielle pour implémenter la distribution de contenu des composants dans Vue.
- Abréviation: #
- Type attenduExpression JavaScript (facultative, nécessaire uniquement lors de la réception de props)
- FonctionDésigne des slots nommés ou des slots à portée.
Utilisation de base
1. Slots nommés
Exemple
<template>
<base-layout>
<template v-slot:header>
<h1>Titre de la page</h1>
</template>
<template v-slot:default>
<p>Zone de contenu principale</p>
</template>
<template v-slot:footer>
<p>Informations de pied de page</p>
</template>
</base-layout>
</template>
<base-layout>
<template v-slot:header>
<h1>Titre de la page</h1>
</template>
<template v-slot:default>
<p>Zone de contenu principale</p>
</template>
<template v-slot:footer>
<p>Informations de pied de page</p>
</template>
</base-layout>
</template>
2. Forme abrégée
Exemple
<!-- Équivalent -->
<template v-slot:header>Titre</template>
<template #header>Titre</template>
<template v-slot:header>Titre</template>
<template #header>Titre</template>
3. Slots avec portée
Les slots avec portée permettent aux composants enfants de transmettre des données aux composants parents :
Exemple
<!-- Composant parent -->
<template>
<current-user v-slot="slotProps">
<p>Nom d'utilisateur: {{ slotProps.user.name }}</p>
</current-user>
</template>
<script>
export default {
components: { CurrentUser }
}
</script>
<!-- Composant enfant 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>Nom d'utilisateur: {{ slotProps.user.name }}</p>
</current-user>
</template>
<script>
export default {
components: { CurrentUser }
}
</script>
<!-- Composant enfant CurrentUser.vue -->
<template>
<slot :user="currentUser"></slot>
</template>
<script>
export default {
data() {
return {
currentUser: { name: 'Zhang San' }
}
}
}
</script>
Autres extensions
Vue3 Directives intégrées