Activation de la découverte automatique
Depuis la v2.13
, Nuxt peut importer automatiquement vos composants lorsqu'ils sont utilisés dans vos templates. Pour activer cette fonctionnalité, définissez components: true
dans votre configuration:
export default {
components: true
}
Utilisation des composants
Une fois que vous avez créé vos composants dans le répertoire components
, ils seront alors disponibles dans toute votre application sans qu'il soit nécessaire de les importer.
| components/
--| TheHeader.vue
--| TheFooter.vue
<template>
<div>
<TheHeader />
<Nuxt />
<TheFooter />
</div>
</template>
Noms des composants
Si vous avez des composants dans des répertoires imbriqués tels que :
| components/
--| base/
----| foo/
------| Button.vue
Le nom du composant sera basé sur son propre chemin et nom de fichier. Par conséquent, le composant sera :
<BaseFooButton />
Button.vue
en BaseFooButton.vue
.)Si vous souhaitez utiliser une structure de répertoires personnalisée qui ne doit pas faire partie du nom du composant, vous pouvez spécifier explicitement ces répertoires :
| components/
--| base/
----| foo/
------| Button.vue
components: {
dirs: [
'~/components',
'~/components/base'
]
}
Et maintenant, dans votre template, vous pouvez utiliser FooButton
au lieu de BaseFooButton
.
<FooButton />
Imports dynamiques
Pour importer dynamiquement un composant (également appelé chargement en arrière plan d'un composant), il vous suffit d'ajouter le préfixe Lazy
au nom du composant.
<template>
<div>
<TheHeader />
<Nuxt />
<LazyTheFooter />
</div>
</template>
Ceci est particulièrement utile si le composant n'est pas toujours nécessaire. En utilisant le préfixe Lazy
, vous pouvez retarder le chargement du code du composant jusqu'au bon moment, ce qui peut être utile pour optimiser la taille de votre bundle JavaScript.
<template>
<div>
<h1>Mountains</h1>
<LazyMountainsList v-if="show" />
<button v-if="!show" @click="show = true">Show List</button>
</div>
</template>
<script>
export default {
data() {
return {
show: false
}
}
}
</script>