You are browsing Nuxt 2 docs. Go to Nuxt 3 docs, or learn more about Nuxt 2 Long Term Support.

Page traduite Le contenu de cette page peut être déprécié.

pages

Le répertoire pages contient les vues et les routes de vos applications. Nuxt lit tous les fichiers .vue à l'intérieur de ce répertoire et crée automatiquement la configuration du routeur pour vous.


Vous pouvez également créer des routes avec des fichiers .js et .ts

Chaque composant de Page est un composant Vue mais Nuxt ajoute des attributs et des fonctions spéciales pour rendre le développement de votre application universelle aussi facile que possible.

<template>
  <h1 class="red">Bonjour {{ name }}!</h1>
</template>

<script>
  export default {
    // les propriétés de la page vont ici
  }
</script>

<style>
  .red {
    color: red;
  }
</style>

Pages dynamiques

Les pages dynamiques peuvent être créées lorsque vous ne connaissez pas le nom de la page parce qu'il provient d'une API ou que vous ne voulez pas avoir à créer la même page encore et encore. Pour créer une page dynamique, vous devez ajouter un underscore (_) avant le nom du fichier .vue ou avant le nom du répertoire, si vous souhaitez que le répertoire soit dynamique. Vous pouvez nommer le fichier ou le répertoire comme vous le souhaitez, mais vous devez le faire précéder d'un underscore .

Si nous avons défini un fichier nommé _slug.vue dans notre répertoire pages, nous pouvons accéder à la valeur en utilisant le contexte avec params.slug

pages/_slug.vue
<template>
  <h1>{{ this.slug }}</h1>
</template>

<script>
  export default {
    async asyncData({ params }) {
      const slug = params.slug // En appelant /abc, le slug sera "abc".
      return { slug }
    }
  }
</script>

Si nous avons défini un fichier nommé \_slug.vue dans un répertoire appelé \_book, nous pouvons accéder à la valeur en utilisant le contexte avec params.slug et params.book

pages/_book/_slug.vue
<template>
  <h1>{{ this.book }} / {{ this.slug }}</h1>
</template>

<script>
  export default {
    async asyncData({ params }) {
      const book = params.book
      const slug = params.slug
      return { book, slug }
    }
  }
</script>

Propriétés

asyncData

AsyncData est appelé à chaque fois avant le chargement du composant. Elle peut être asynchrone et reçoit le contexte en argument. L'objet renvoyé sera fusionné avec votre objet de données.

pages/index.vue
export default {
  asyncData (context) {
    return { name: 'World' }
  }

fetch

Chaque fois que vous avez besoin d'obtenir des données asynchrones, vous pouvez utiliser fetch(). Fetch est appelé côté serveur lors du rendu de la route, et côté client lors de la navigation.

<script>
  export default {
    data() {
      return {
        posts: []
      }
    },
    async fetch() {
      this.posts = await fetch('https://api.nuxtjs.dev/posts').then(res =>
        res.json()
      )
    }
  }
</script>

Définissez des balises

pour la page en cours. Nuxt utilise vue-meta pour mettre à jour l'en-tête du document et les méta attributs de votre application.

pages/index.vue
export default {
  head() {
    // Définit les balises Méta pour cette page
  }
}

layout

Précisez une mise en page définie dans le répertoire des mises en page.

pages/index.vue
export default {
  layout: 'blog'
}

loading

Si ce paramètre est défini sur false, il empêche une page d'appeler automatiquement this.$nuxt.$loading.finish() lorsque vous l'entrez et this.$nuxt.$loading.start() lorsque vous la quittez, ce qui vous permet de contrôler manuellement le comportement, comme le montre cet exemple .

pages/index.vue
export default {
  loading: false
}
S'applique uniquement si la propriété loading est également défini dans le fichier nuxt.config.js.

transition

Définit une transition spécifique pour la page.

pages/index.vue
export default {
  transition: 'fade'
}

scrollToTop

La propriété scrollToTop vous permet de dire à Nuxt de faire défiler la page vers le haut avant de la rendre. Par défaut, Nuxt fait défiler la page vers le haut lorsque vous allez sur une autre page, mais avec les routes enfant, Nuxt garde la position de défilement. Si vous voulez dire à Nuxt de faire défiler la page vers le haut lors du rendu de votre route fille, mettez scrollToTop à true

pages/index.vue
export default {
  scrollToTop: true
}

Inversement, vous pouvez aussi régler manuellement scrollToTop à false sur les routes parentes.

Si vous souhaitez remplacer le comportement de défilement par défaut de Nuxt, consultez l'option scrollBehavior .

middleware

Définit le middleware pour cette page qui sera appelé avant le rendu de la page.

pages/index.vue
export default {
  middleware: 'auth'
}

La propriété watchQuery

Utilisez la propriété WatchQuery pour configurer un observateur (watcher) pour les chaînes de requête. Si les chaînes définies changent, toutes les méthodes du composants (asyncData, fetch, validate, layout, ...) seront appelées. Le watcher est désactivée par défaut pour améliorer les performances.

pages/index.vue
export default {
  watchQuery: ['page']
}
Si vous voulez mettre en place un watcher pour toutes les chaînes de requête, définissez watchQuery sur true.
pages/index.vue
export default {
  watchQuery: true
}

Vous pouvez également utiliser la fonction watchQuery(newQuery, oldQuery) pour avoir des observateurs plus raffinés.

pages/index.vue
export default {
  watchQuery(newQuery, oldQuery) {
    // Exécute les méthodes du composants que si l'ancienne chaîne de requête contenait `bar`.
    // et que la nouvelle chaîne de requête contient `foo`.
    return newQuery.foo && oldQuery.bar
  }
}

key

Comme la propriété key qui peut être utilisée sur les composants Vue dans les modèles comme une indication pour le DOM virtuel, cette propriété permet à la valeur de la clé d'être définie à partir de la page elle-même (plutôt que le composant parent).

Par défaut dans Nuxt, cette valeur sera $route.path, ce qui signifie que naviguer vers une route différente assurera la création d'un composant de page propre. Logiquement équivalent à :

<router-view :key="$route.path" />

La propriété peut être une String ou une Function qui prend la route comme premier argument.

Ignorer des pages

Si vous voulez ignorer des pages afin qu'elles ne soient pas généré dans le fichier router.js, alors vous pouvez les ignorer en les préfixant par un -.

Par exemple, pages/-about.vue sera ignorée.

Configuration

Vous pouvez renommer le répertoire pages/ en quelque chose de différent en définissant l'option dir.pages :

nuxt.config.js
export default {
  dir: {
    // Renommer le répertoire `pages` en `routes`.
    pages: 'routes'
  }
}