2.3 KiB
icon | title | head.title |
---|---|---|
IconDirectory | pages | Pages directory |
The pages/
directory is optional, meaning that if you only use app.vue, vue-router won't be included, reducing your application bundle size.
Pages directory
Nuxt will automatically integrate Vue Router and map pages/
directory into the routes of your application.
::alert{type=warning} Unlike components, your pages must have a single root element to allow Nuxt to apply route transitions between pages. ::
Dynamic Routes
If you place anything within square brackets, it will be turned into a dynamic route parameter. You can mix and match multiple parameters and even non-dynamic text within a file name or directory.
If you need a catch-all route, you create it by using a file named like [...slug].vue
. This will match all routes under that path, and thus it doesn't support any non-dynamic text.
Example
-| pages/
---| index.vue
---| users-[group]/
-----| [id].vue
Given the example above, you can access group/id within your component via the $route
object:
<template>
{{ $route.params.group }}
{{ $route.params.id }}
</template>
Nested Routes
We provide a semantic alias for RouterView
, the NuxtChild
component, for displaying the children components of a nested route.
Example
-| pages/
---| parent/
------| child.vue
---| parent.vue
To display the child.vue
component, simply put the <NuxtChild>
component inside the parent.vue
component:
<template>
<div>
<h3>child.vue</h3>
</div>
</template>
<template>
<div>
<h1>parent.vue</h1>
<NuxtChild />
</div>
</template>
<!-- output -->
<template>
<div>
<h1>parent.vue</h1>
<div>
<h3>child.vue</h3>
</div>
</div>
</template>
The example file tree above should generate these routes:
[
{
path: '/parent',
component: '~/pages/parent.vue',
name: 'parent',
children: [
{
path: 'child',
component: '~/pages/parent/child.vue',
name: 'parent-child'
}
]
}
]