Composants Nuxt
Nuxt arrive avec quelques composants importants, ceux-ci nous seront utiles pour construire notre application. Les composants sont disponibles de manière globale, ce qui veut dire que nous n'avons pas besoin de les importer pour les utiliser.
Dans les paragraphes suivants, chacun de ces composants sera expliqué.
Le composant Nuxt
Le composant <Nuxt> nous permet d'afficher les composants page. Basiquement, le composant est remplacé par les pages qui concordent avec la route montrée. Ainsi, il est important d'ajouter le composant <Nuxt> à nos layouts.
<template>
<div>
<div>Ma barre de navigation</div>
<Nuxt />
<div>Mon pied de page</div>
</div>
</template>
<Nuxt> ne peut être utilisé que dans les layouts .Le composant <Nuxt> peut prendre la propriété nuxt-child-key, cette dernière sera passée à <RouterView> afin que les transitions dans les pages dynamiques fonctionnent correctement.
Il y a 2 façons de gérer la propriété key de <RouterView>:
-
Utiliser la propriété
nuxt-child-keysur notre composant<Nuxt>
<template>
<div>
<Nuxt :nuxt-child-key="uneKey" />
</div>
</template>
-
Ajouter l'option
keydans les composants page en tant questringoufunction
export default {
key(route) {
return route.fullPath
}
}
Le composant NuxtChild
Ce composant est utilisé pour afficher les composants enfants dans une route imbriquée.
Exemple:
-| pages/
---| parent/
------| child.vue
---| parent.vue
Cette arborescence de fichiers va générer les chemins suivants :
;[
{
path: '/parent',
component: '~/pages/parent.vue',
name: 'parent',
children: [
{
path: 'child',
component: '~/pages/parent/child.vue',
name: 'parent-child'
}
]
}
]
Pour afficher le composant child.vue, il faut insérer le composant <NuxtChild> à l'intérieur de pages/parent.vue:
<template>
<div>
<h1>Je suis la view parent</h1>
<NuxtChild :foobar="123" />
</div>
</template>
keep-alive
Les composants <Nuxt> et <NuxtChild/> acceptent tous les deux keep-alive et keep-alive-props.
keep-alive et keep-alive-props, se référer à la documentation de Vue .<template>
<div>
<Nuxt keep-alive :keep-alive-props="{ exclude: ['modal'] }" />
</div>
</template>
<!-- le code du haut sera converti dans le code suivant -->
<div>
<keep-alive :exclude="['modal']">
<RouterView />
</keep-alive>
</div>
<template>
<div>
<NuxtChild keep-alive :keep-alive-props="{ exclude: ['modal'] }" />
</div>
</template>
<!-- le code du haut sera converti dans le code suivant -->
<div>
<keep-alive :exclude="['modal']">
<RouterView />
</keep-alive>
</div>
Les composants <NuxtChild> peuvent aussi recevoir des propriétés comme n'importe quel composant standard de Vue.
<template>
<div>
<NuxtChild :key="$route.params.id" />
</div>
</template>
Pour voir un exemple, on peut regarder celui sur les routes imbriquées .
Le composant NuxtLink
Pour naviguer entre les pages de notre application, il faut utiliser le composant <NuxtLink>. Ce composant est inclus dans Nuxt et nous n'avons donc pas besoin de l'importer comme un composant standard. Son fonctionnement est le même qu'une balise HTML <a> a l'exception qu'au lieu d'utiliser un href="/about" il faut utiliser to="/about". Si nous avons déjà utilisé vue-router par le passé, nous pouvons voir <NuxtLink> comme un équivalent à <RouterLink>.
Un simple lien vers la page index.vue dans notre répertoire pages:
<template>
<NuxtLink to="/">Page d'accueil</NuxtLink>
</template>
Le composant <NuxtLink> doit être utilisé pour tous les liens internes. Ce qui veut dire que tous les liens à l'intérieur de notre site doivent utiliser <NuxtLink>. La balise <a> doit être utilisée pour les liens externes (les sites web qui ne font pas partie de notre application).
<template>
<div>
<h1>Page d'accueil</h1>
<nuxt-link to="/about">
À propos (lien interne à l'application Nuxt)
</nuxt-link>
<a href="https://nuxtjs.org">Lien externe vers une autre page</a>
</div>
</template>
RouterLink, se référer à la documentation du Routeur Vue .<NuxtLink> utilise le préfétching intelligent par défaut.prefetchLinks
Nuxt fait du prefetching intelligent, il détecte si un lien est visible (soit dans le viewport, soit lors d'un défilement) et il prefetch le JavaScript pour ces pages pour qu'elles soient prêtes quand l'utilisateur clique sur le lien. Nuxt charge la ressource seulement quand le navigateur n'est pas occupé. Le prefetching n'a pas non plus lieu si l'utilisateur est hors-ligne ou qu'il est en connexion 2G.
Désactiver le prefetching pour des liens spécifiques
Cependant, si notre page est lourde en JavaScript ou que nous avons beaucoup de pages différentes qui se retrouveraient à charger de nombreux scripts tiers, nous pouvons désactiver le prefetching sur certains de ces liens. Pour cela, nous pouvons utiliser la propriété no-prefetch. Depuis Nuxt v2.10.0, nous pouvons aussi définir la propriété prefetch à false.
<NuxtLink to="/about" no-prefetch>Page à propos non pré-fetchée</NuxtLink>
<NuxtLink to="/about" :prefetch="false">Page à propos non pré-fetchée</NuxtLink>
Désactiver le prefetching de manière globale
Pour désactiver le prefetching sur tous les liens, il faut passer prefetchLinks à false:
export default {
router: {
prefetchLinks: false
}
}
Depuis Nuxt v2.10.0, si nous avons passé prefetchLinks à false mais que nous souhaitons cependant prefetch un lien particulier, nous pouvons utiliser la propriété prefetch:
<NuxtLink to="/about" prefetch>Page à propos pré-fetchée</NuxtLink>
linkActiveClass
linkActiveClass marche de la même façon que la classe sur des liens actifs de vue-router. Si nous souhaitons montrer quels liens sont actifs, la seule chose que nous avons besoin de faire est de créer un peu de CSS pour la classe nuxt-link-active.
.nuxt-link-active {
color: red;
}
main.css.Si nous souhaitons changer le nom de cette classe par autre chose, nous pouvons modifier linkActiveClass dans la propriété router à l'intérieur du fichier nuxt.config.js.
export default {
router: {
linkActiveClass: 'mon-super-lien-actif'
}
}
linkActiveClass du vue-router, plus d'informations ici .linkExactActiveClass
linkExactActiveClass marche exactement de la même façon que linkActiveClass dans le cas d'une correspondance exacte de la route.
.nuxt-link-exact-active {
color: green;
}
La configuration dans le fichier nuxt.config.js se fait de la même façon.
export default {
router: {
linkExactActiveClass: 'mon-lien-exact-actif'
}
}
linkPrefetchedClass
linkPrefetchedClass va nous permettre d'ajouter des styles pour tous les liens qui ont été prefetch. C'est pratique pour tester tous les liens qui ont été prefetch après avoir modifié un comportement. linkPrefetchedClass est désactivé par défaut. Si nous souhaitons l'activer, il faut ajouter la propriété dans le fichier nuxt.config.js.
export default {
router: {
linkPrefetchedClass: 'lien-de-nuxt-prefetched'
}
}
Il suffit par la suite d'ajouter les styles pour cette classe.
.nuxt-link-prefetched {
color: orangeRed;
}
lien-de-nuxt-prefetched, le nom de la classe est totalement arbitraire.Le composant côté-client seulement
L'usage de ce composant force un composant a être render uniquement du côté client. Pour importer un composant seulement sur le client, il faut l'encapsuler dans un client-only.
<template>
<div>
<sidebar />
<client-only placeholder="Chargement...">
<!-- ce composant sera render seulement du côté client -->
<comments></comments>
</client-only>
</div>
</template>
Utiliser un élément de substitution jusqu'à ce que le contenu du <client-only /> ne soit monté sur le client.
<template>
<div>
<sidebar />
<client-only>
<!-- ce composant sera render seulement du côté client -->
<comments></comments>
<!-- indicateur de chargement, render du côté serveur -->
<comments-placeholder slot="placeholder"></comments-placeholder>
</client-only>
</div>
</template>
<client-only> au lieu de <no-ssr>.
Clément Ollivier
Daniel Roe
Alex Hirzel
Ajeet Chaulagain
René Eschke
Sébastien Chopin
Nico Devs
Muhammad
Nazaré da Piedade
Naoki Hamada
Tom
Yann Aufray
Anthony Chu
Nuzhat Minhaz
Lucas Portet
Richard Schloss
Xanzhu
bpy
Antony Konstantinidis
Hibariya
Jose Seabra
Eze
Florian LEFEBVRE
Lucas
Julien SEIXAS
Hugo
Sylvain Marroufin
Spencer Cooley
Piotr Zatorski
Vladimir Semenov
Harry Allen
kazuya kawaguchi
Unai Mengual
Hyunseung Lee
Alexandre Chopin
pooya parsa
Nick Medrano
Mosaab Emam
Iljs Путлер Капут
Heitor Ramon Ribeiro
Nero
Yoon Han
Ikko Ashimine
FamCodings
Ayouli
F. Hinkelmann
felipesuri
Christophe Carvalho Vilas-Boas
Leoš Literák
Trizotti
Marcello Bachechi
Rodolphe
Thomas Underwood
Shek Evgeniy
Lukasz Formela
Hugo Torzuoli