La propriété router
La propriété router permet de personnaliser le routeur de Nuxt (vue-router ).
base
-
Type:
String -
Par défaut:
'/'
L'URL de base de l'application. Par exemple, si l'intégralité de la SPA se situe sous /app/ alors la valeur de base doit être définie sur '/app/'.
Ceci peut être utile si l'on a besoin de servir du Nuxt dans un autre contexte, tel qu'une partie d'un plus gros site par exemple. Il sera à vous de juger si vous pensez qu'un reverse proxy pour le front sera nécessaire ou pas.
Si on veut une redirection sur le router.base, on peut y parvenir en utilisant un hook, se référer à la documentation sur la redirection sur router.base lorsque non à la racine .
export default {
router: {
base: '/app/'
}
}
base est défini, Nuxt va aussi ajouter <base href="{{ router.base }}"/> dans l'entête du document.Cette option est donnée directement à base dans
vue-router.
routeNameSplitter
-
Type:
String -
Par défaut:
'-'
On pourrait vouloir changer le séparateur entre le nom des routes que Nuxt utilise. On peut y parvenir grâce à l'option routeNameSplitter dans notre fichier de configuration. Imaginons que nous ayons le fichier page pages/posts/_id.vue. Nuxt va générer le nom de la route de manière programmatique, dans le cas présent: posts-id. Passer le routeNameSplitter à / nous donnerait posts/id.
export default {
router: {
routeNameSplitter: '/'
}
}
extendRoutes
-
Type:
Function
On pourrait vouloir personnaliser les routes créées par Nuxt. L'option qui nous permet d'y arriver est extendRoutes.
export default {
router: {
extendRoutes(routes, resolve) {
routes.push({
name: 'custom',
path: '*',
component: resolve(__dirname, 'pages/404.vue')
})
}
}
}
Si on veut trier nos routes, on peut utiliser la fonction sortRoutes(routes) depuis @nuxt/utils:
import { sortRoutes } from '@nuxt/utils'
export default {
router: {
extendRoutes(routes, resolve) {
// on ajoute des routes ici...
// ensuite on les trie
sortRoutes(routes)
}
}
}
Le schéma de la route doit respecter le schéma de vue-router .
chunkNames qui correspondent aux composants.export default {
router: {
extendRoutes(routes, resolve) {
routes.push({
path: '/users/:id',
components: {
default: resolve(__dirname, 'pages/users'), // ou routes[index].component
modal: resolve(__dirname, 'components/modal.vue')
},
chunkNames: {
modal: 'components/modal'
}
})
}
}
}
fallback
-
Type:
boolean -
Par défaut:
false
Gère le comportement du router quand le navigateur ne supporte pas history.pushState alors que ce mode est défini. Lorsque défini à true, le router fallback sur le hash mode.
Si on le passe à false, le router va faire un rafraîchissement à chaque navigation de router-link dans IE9. Ceci est essentiel quand l'application est render côté serveur et a besoin de marcher dans IE9 car le hash ne marche pas avec du rendu côté serveur (SSR).
Cette option est donnée directement à fallback dans
vue-router.
linkActiveClass
-
Type:
String -
Par défaut:
'nuxt-link-active'
Permet de personnaliser globalement la classe active par défaut de <nuxt-link> .
export default {
router: {
linkActiveClass: 'active-link'
}
}
Cette option est donnée directement à linkactiveclass dans
vue-router.
linkExactActiveClass
-
Type:
String -
Par défaut:
'nuxt-link-exact-active'
Permet de personnaliser globalement la classe active exacte par défaut de <nuxt-link> .
export default {
router: {
linkExactActiveClass: 'exact-active-link'
}
}
Cette option est donnée directement à linkexactactiveclass dans
vue-router.
linkPrefetchedClass
-
Type:
String -
Par défaut:
false
Permet de personnaliser globalement la classe prefetch par défaut de <nuxt-link> (cette option est désactivée par défaut).
export default {
router: {
linkPrefetchedClass: 'nuxt-link-prefetched'
}
}
middleware
-
Type:
StringouArray-
Items:
String
-
Items:
Définit le(s) middleware par défaut pour chaque page de l'application.
export default {
router: {
// exécute le middleware/user-agent.js sur chaque page
middleware: 'user-agent'
}
}
export default function (context) {
// ajoute la propriété userAgent au contexte (disponible dans `asyncData` et `fetch`)
context.userAgent = process.server
? context.req.headers['user-agent']
: navigator.userAgent
}
Pour en apprendre davantage, se référer au guide du middleware .
mode
-
Type:
String -
Par défaut:
'history'
Personnalise le mode du routeur, ce n'est pas une option qu'il est recommandé de changer en raison du render côté serveur (SSR).
export default {
router: {
mode: 'hash'
}
}
Cette option est donnée directement à mode dans
vue-router.
parseQuery / stringifyQuery
-
Type:
Function
Fournit des fonctions de query string parse / stringify personnalisées. Écrase les valeurs par défaut.
Cette option est donnée directement aux parseQuery / stringifyQuery dans
vue-router.
prefetchLinks
Ajouté dans Nuxt v2.4.0
-
Type:
Boolean -
Par défaut:
true
Paramètre le <nuxt-link> afin qu'il prefetch la page code-splitée lorsqu'elle apparaît dans le viewport. Requiert le support de l'IntersectionObserver , à vérifier sur CanIUse .
Si nécessaire, nous recommandons de polyfill cette fonctionnalité avec un service tel que Polyfill.io :
export default {
head: {
script: [
{
src:
'https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver',
body: true
}
]
}
}
Pour désactiver le prefecthing sur un lien spécifique, on peut utiliser la prop no-prefetch. Depuis Nuxt v2.10.0, on peut aussi passer la prop prefetch à false:
<nuxt-link to="/about" no-prefetch>Page à propos non pré-fetchée</nuxt-link>
<nuxt-link to="/about" :prefetch="false">Page à propos non pré-fetchée</nuxt-link>
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 défini prefetchLinks à false mais souhaitons tout de même prefetch un lien spécifique, on peut utiliser la propriété prefetch:
<nuxt-link to="/about" prefetch>APage à propos non pré-fetchée</nuxt-link>
prefetchPayloads
Ajouté avec la v2.13.0, disponible seulement pour une cible statique .
-
Type:
Boolean -
Par défaut:
true
Lorsqu'on utilise nuxt generate avec target: 'static', Nuxt va générer un payload.js pour chaque page.
Lorsque cette cette option est activée, Nuxt va automatiquement prefetch le payload de la page liée lorsque le <nuxt-link> est visible dans le viewport, créant une navigation instantanée.
On peut désactiver ce comportement en passant prefetchPaylods à false:
export default {
router: {
prefetchPayloads: false
}
}
scrollBehavior
-
Type:
Function
L'option scrollBehavior permet de définir un comportement personnalisé pour la position du défilement de la page entre les routes. Cette méthode est appelée à chaque fois qu'une page est render.
Pour en apprendre davantage, se référer à la documentation sur le vue-router scrollBehavior .
À partir de la v2.9.0, on peut utiliser un fichier pour écraser le comportement du router scrollBehavior, ce fichier doit être placé dans ~/app/router.scrollBehavior.js (note: ce nom de fichier est sensible à la casse si exécuté sur Windows).
On peut voir le fichier router.scrollBehavior.js par défaut de Nuxt ici: packages/vue-app/template/router.scrollBehavior.js .
Un exemple de comment forcer la position du défilement à se retrouver tout en haut pour chaque route:
app/router.scrollBehavior.js
export default function (to, from, savedPosition) {
return { x: 0, y: 0 }
}
trailingSlash
-
Type:
Booleanouundefined -
Par défaut:
undefined - Disponible depuis: v2.10
Si cette option est passée à true, des slashs traînants seront suffixés pour chaque route. Sinon, ils seront enlevés.
Attention: Cette option doit être changée avec une certaine préparation et une sequence de tests conséquents. Lorsque l'on définit router.trailingSlash a quelque chose d'autre que la valeur par défaut (undefined), la route opposée cessera de fonctionner. Il doit donc y avoir des redirections 301 et vos liens internes doivent s'adapter eux aussi. Si vous passez trailingSlash à true, alors seulement example.com/abc/ vont marcher mais pas example.com/abc. Dans le cas d'un false, c'est l'inverse.
Example behavior (avec routes enfant)
Pour un répertoire avec cette structure:
-| pages/
---| index.vue
---| posts.vue
---| posts/
-----| _slug.vue
-----| index.vue
Le comportement pour chaque réglage possible de trailingSlash:
Route Page
/ ~/pages/index.vue
/posts ~/pages/posts.vue (parent) + ~/pages/posts.vue (route enfant)
/posts/ ~/pages/posts.vue (parent) + ~/pages/posts.vue (route enfant)
/posts/foo ~/pages/posts.vue (parent) + ~/pages/_slug.vue (route enfant)
/posts/foo/ ~/pages/posts.vue (parent) + ~/pages/_slug.vue (route enfant)
Route Page
/ ~/pages/index.vue
/posts 404
/posts/ ~/pages/posts.vue (parent) + ~/pages/index.vue (route enfant)
/posts/foo 404
/posts/foo/ ~/pages/posts.vue (parent) + ~/pages/_slug.vue (route enfant)
Route Page
/ ~/pages/index.vue
/posts ~/pages/posts.vue
/posts/ ~/pages/posts.vue (parent) + ~/pages/index.vue (route enfant)
/posts/foo ~/pages/posts.vue (parent) + ~/pages/_slug.vue (route enfant)
/posts/foo/ 404
Leoš Literák
Trizotti
Clément Ollivier
Sébastien Chopin
Marcello Bachechi
Rodolphe
Thomas Underwood
Shek Evgeniy
felipesuri
Lukasz Formela
Hugo Torzuoli
Sylvain Marroufin
Kareem Dabbeet
tramplay
Daniel Roe
verebelyicsaba
Adam
Nate Butler
Sandra Rodgers
Arpit Patidar
Matthew Kuehn
Steven DUBOIS
Travis Lindsey
syagawa
Maxime
かる
Al Power
Florent Delerue
quanghm
José Manuel Casani Guerra
Unai Mengual
kazuya kawaguchi
Michael Lynch
Tomachi
pooya parsa
Meir Roth
Brett
Adam Miedema
Thomas Bnt
Kazuki Furukawa
Anthony Ruelle
Christophe Carvalho Vilas-Boas
Roman Harmyder