Roteamento do Sistema de Ficheiro
A Nuxt gera automaticamente a configuração da vue-router baseada na nossa árvore de ficheiros .vue no diretório de páginas. Quando criamos um ficheiro .vue no nosso diretório de páginas, teremos o roteamento básico a funcionar sem necessidade de configuração adicional.
Por vezes, podemos precisar de criar rotas dinâmicas ou rotas encaixadas, ou podemos precisar de configurar melhor a propriedade do roteador. Este capítulo aborda tudo o que é necessário saber para tirar o máximo partido do nosso roteador.
NuxtLink para navegar entre as páginas.<template>
<NuxtLink to="/">Home page</NuxtLink>
</template>
Rotas Básicas
Esta árvore de ficheiro:
pages/
--| user/
-----| index.vue
-----| one.vue
--| index.vue
gerará automaticamente:
router: {
routes: [
{
name: 'index',
path: '/',
component: 'pages/index.vue'
},
{
name: 'user',
path: '/user',
component: 'pages/user/index.vue'
},
{
name: 'user-one',
path: '/user/one',
component: 'pages/user/one.vue'
}
]
}
Rotas Dinâmicas
Por vezes, não é possível saber o nome da rota, por exemplo, quando fazemos uma chamada a uma interface de programação de aplicação para obter uma lista de utilizadores ou de publicações do blogue. Chamamos-lhes de rotas dinâmicas. Para criar uma rota dinâmica, precisamos adicionar um sublinhado (_) antes do nome do ficheiro .vue, ou antes, do nome do diretório. Podemos dar ao ficheiro ou diretório o nome que quisermos, mas temos de o prefixar com um sublinhado.
Esta árvore de ficheiro:
pages/
--| _slug/
-----| comments.vue
-----| index.vue
--| users/
-----| _id.vue
--| index.vue
gerará automaticamente:
router: {
routes: [
{
name: 'index',
path: '/',
component: 'pages/index.vue'
},
{
name: 'users-id',
path: '/users/:id?',
component: 'pages/users/_id.vue'
},
{
name: 'slug',
path: '/:slug',
component: 'pages/_slug/index.vue'
},
{
name: 'slug-comments',
path: '/:slug/comments',
component: 'pages/_slug/comments.vue'
}
]
}
users-id tem o caminho :id? o que o torna opcional, se quisermos torná-la obrigatória, criamos um ficheiro index.vue no diretório users/_id.Acessar Localmente os Parâmetros da Rota
Podemos acessar aos parâmetros atuais da rota na nossa página ou componente local referenciando this.$route.params.{parameterName}. Por exemplo, se tivéssemos uma página dinâmica de utilizadores (users/_id.vue) e quiséssemos acessar ao parâmetro id para carregar a informação do utilizador ou do processo, poderíamos acessar à variável desta maneira this.$route.params.id.
Rotas Encaixadas
A Nuxt permite-nos criar rotas encaixadas usando as rotas filhas da vue-router. Para definir o componente principal duma rota encaixada, precisamos de criar um ficheiro .vue com o mesmo nome que o diretório que contém as nossas visões filhas.
NuxtChild dentro do componente pai (ficheiro .vue).Esta árvore de ficheiro:
pages/
--| users/
-----| _id.vue
-----| index.vue
--| users.vue
gerará automaticamente:
router: {
routes: [
{
path: '/users',
component: 'pages/users.vue',
children: [
{
path: '',
component: 'pages/users/index.vue',
name: 'users'
},
{
path: ':id',
component: 'pages/users/_id.vue',
name: 'users-id'
}
]
}
]
}
Rotas Dinâmicas Encaixadas
Este não é um cenário comum, mas é possível com a Nuxt ter filhos dinâmicos dentro de pais dinâmicos.
Esta árvore de ficheiro:
pages/
--| _category/
-----| _subCategory/
--------| _id.vue
--------| index.vue
-----| _subCategory.vue
-----| index.vue
--| _category.vue
--| index.vue
gerará automaticamente:
router: {
routes: [
{
path: '/',
component: 'pages/index.vue',
name: 'index'
},
{
path: '/:category',
component: 'pages/_category.vue',
children: [
{
path: '',
component: 'pages/_category/index.vue',
name: 'category'
},
{
path: ':subCategory',
component: 'pages/_category/_subCategory.vue',
children: [
{
path: '',
component: 'pages/_category/_subCategory/index.vue',
name: 'category-subCategory'
},
{
path: ':id',
component: 'pages/_category/_subCategory/_id.vue',
name: 'category-subCategory-id'
}
]
}
]
}
]
}
Rotas Encaixadas Dinâmicas Desconhecidas
Se não soubermos a profundidade da nossa estrutura de endereço de localização de recurso, podemos usar _.vue para combinar dinamicamente caminhos encaixados. Isto lidará com os pedidos que não correspondem a uma rota mais específica.
Esta árvore de ficheiro:
pages/
--| people/
-----| _id.vue
-----| index.vue
--| _.vue
--| index.vue
gerará automaticamente:
/ -> index.vue
/people -> people/index.vue
/people/123 -> people/_id.vue
/about -> _.vue
/about/careers -> _.vue
/about/careers/chicago -> _.vue
_.vue.Estender o Roteador
Existem várias maneiras de estender o roteamento com a Nuxt:
-
router-extras-modulepara personalizar os parâmetros de rota na página. -
@nuxtjs/routerpara sobrescrever o roteador da Nuxt e escrever o nosso próprio ficheirorouter.js. -
Usar a propriedade
router.extendRoutesno nossonuxt.config.js.
A Propriedade router
A propriedade router permite-nos personalizar o roteador (vue-router) da Nuxt:
export default {
router: {
// personalizar o roteador da Nuxt
}
}
base
O endereço de localização de recurso de base da aplicação. Por exemplo, se toda a aplicação de página única for servida sob /app/, então a base deve usar o valor '/app/'.
extendRoutes
Podemos querer estender as rotas criadas pela Nuxt. Podemos fazer isto através da opção extendRoutes.
Exemplo de adição duma rota personalizada:
export default {
router: {
extendRoutes(routes, resolve) {
routes.push({
name: 'custom',
path: '*',
component: resolve(__dirname, 'pages/404.vue')
})
}
}
}
Se quisermos organizar as nossas rotas, podemos utilizar a função sortRoutes(routes) de @nuxt/utils:
import { sortRoutes } from '@nuxt/utils'
export default {
router: {
extendRoutes(routes, resolve) {
// Adicionar algumas rotas abaixo ...
// e depois organizá-las
sortRoutes(routes)
}
}
}
vue-router .chunkNames correspondentes dos components nomeados.export default {
router: {
extendRoutes(routes, resolve) {
routes.push({
path: '/users/:id',
components: {
default: resolve(__dirname, 'pages/users'), // or routes[index].component
modal: resolve(__dirname, 'components/modal.vue')
},
chunkNames: {
modal: 'components/modal'
}
})
}
}
}
fallback
Controla se o roteador deve retroceder ao modo normal quando o navegador não suportar history.pushState, mas o modo está definido para history.
mode
Configura o modo do roteador, não é recomendável alterá-lo devida à interpretação do lado do servidor.
parseQuery / stringifyQuery
Fornece as funções parseQuery ou stringifyQuery da consulta personalizada.
routeNameSplitter
Podemos querer alterar o separador entre os nomes da rota que a Nuxt utiliza. Podemos fazer isto através da opção routeNameSplitter no nosso ficheiro de configuração. Imaginemos que temos o ficheiro de página pages/posts/_id.vue. A Nuxt gerará no nome da rota programaticamente, neste caso posts-id. Alterar a configuração da routeNameSplitter para / o nome mudará para posts/id:
export default {
router: {
routeNameSplitter: '/'
}
}
scrollBehavior
A opção scrollBehavior nos permite definir um comportamento personalizado para a posição do deslocamento entre as rotas. Este método é chamado sempre que uma página é desenhada.
scrollBehavior da vue-router .Disponível desde a versão 2.9.0:
Na Nuxt, podemos utilizar um ficheiro para sobrescrever o scrollBehavior do roteador. Este ficheiro deve ser colocado numa pasta chamada app.
~/app/router.scrollBehavior.js.
Exemplo de como forçar a posição do deslocação para o topo em todas as rotas:
export default function (to, from, savedPosition) {
return { x: 0, y: 0 }
}
trailingSlash
Disponível desde a versão: 2.10
Se esta opção for definida como verdadeira, serão acrescentadas barras oblíquas ao final de todas as rotas. Se for definida como falso, serão removidas:s
export default {
router: {
trailingSlash: true
}
}
router.trailingSlash para algo diferente de undefined (o qual é o valor predefinido), a rota oposta deixará de funcionar. Assim, os redirecionamentos de código 301 devem estar em vigor e a nossa hiperligação interna tem de ser adaptada corretamente. Se definirmos trailingSlash com true, então apenas example.com/abc/ funcionará, mas não example.com/abc. No falso, é vise-versa.
Sébastien Chopin
Nazaré da Piedade
Nobu
川音리오
Maciek Palmowski
Nestor Vera
Daniel Roe
Yue Yang
Jeronimas
Alessandro Carrano
Clément Ollivier
Alexander Lichter
N3-rd
Adrien Zaganelli
Mag
Stefan Huber
Olga Bulat
Paiva
Florian Reuschel
Savas Vedova
Steven
Vinícius Alves
Kareem Dabbeet
Valentín Costa
Ryan Skinner
Alex Hirzel
Ajeet Chaulagain
René Eschke
Nico Devs
Muhammad
Naoki Hamada
Tom
Yann Aufray
Anthony Chu
Nuzhat Minhaz
Lucas Portet
Richard Schloss
Bobby
bpy
Antony Konstantinidis
Hibariya
Jose Seabra
Eze
Florian Lefebvre
Lucas Recoaro
Julien SEIXAS