Redirecionamento e Pseudónimos
Redirecionar
O redirecionamento também é feito na configuração de routes
. Para redirecionar de /home
para /
:
const routes = [{ path: '/home', redirect: '/' }]
const routes = [{ path: '/home', redirect: '/' }]
O redirect
também pode apontar para uma rota nomeada:
const routes = [{ path: '/home', redirect: { name: 'homepage' } }]
const routes = [{ path: '/home', redirect: { name: 'homepage' } }]
Ou mesmo usar uma função para o redirecionamento dinâmico:
const routes = [
{
// /search/screens -> /search?q=screens
path: '/search/:searchText',
redirect: to => {
// a função recebe a rota alvo como argumento
// nós retornamos um `path/location` de `redirect` aqui.
return { path: '/search', query: { q: to.params.searchText } }
},
},
{
path: '/search',
// ...
},
]
const routes = [
{
// /search/screens -> /search?q=screens
path: '/search/:searchText',
redirect: to => {
// a função recebe a rota alvo como argumento
// nós retornamos um `path/location` de `redirect` aqui.
return { path: '/search', query: { q: to.params.searchText } }
},
},
{
path: '/search',
// ...
},
]
Nota que os Guardas da Navegação não são aplicados na rota que redireciona, apenas no seu alvo. Por exemplo, no exemplo acima, adicionar um guarda beforeEnter
para a rota /home
não teria qualquer efeito.
Quando estiveres a escrever um redirect
, podes omitir a opção component
porque ele nunca é alcançado diretamente então não existe componente a apresentar. As únicas exceções são as rotas encaixadas: se um registo de rota tiver uma propriedade children
e redirect
, ela também deve ter uma propriedade component
.
Redirecionamento Relativo
É também possível redirecionar para uma localização relativa:
const routes = [
{
// sempre redirecionará o `/users/123/posts` para `/users/123/profile`
path: '/users/:id/posts',
redirect: to => {
// a função recebe a rota alvo como argumento
// uma localização relativa não começa com `/`
// ou { path: 'profile' }
return 'profile'
},
},
]
const routes = [
{
// sempre redirecionará o `/users/123/posts` para `/users/123/profile`
path: '/users/:id/posts',
redirect: to => {
// a função recebe a rota alvo como argumento
// uma localização relativa não começa com `/`
// ou { path: 'profile' }
return 'profile'
},
},
]
Pseudónimos
Um redirecionamento significa que quando o utilizador visitar /home
, a URL será pelo /
, e depois correspondida como /
. Mas o que é um pseudónimo?
Um pseudónimo de /
como /home
significa que quando o utilizador visitar /home
, a URL continua /home
, mas será correspondida como se o utilizador estivesse a visitar /
.
O que está acima pode ser expressado na configuração de rota como:
const routes = [{ path: '/', component: Homepage, alias: '/home' }]
const routes = [{ path: '/', component: Homepage, alias: '/home' }]
Um pseudónimo dá-te a liberdade de mapear uma estrutura de Interface de Utilizador (UI, sigla em Inglês) à uma URL arbitrária, ao invés de ser limitado pela estrutura de encaixamento da configuração. Faça o pseudónimo começar com uma /
para fazer o caminho absolute nas rotas encaixadas. Tu até podes combinar ambos e fornecer vários pseudónimos com um arranjo:
const routes = [
{
path: '/users',
component: UsersLayout,
children: [
// isto apresentará o `UserList` para estas 3 URLs
// - /users
// - /users/list
// - /people
{ path: '', component: UserList, alias: ['/people', 'list'] },
],
},
]
const routes = [
{
path: '/users',
component: UsersLayout,
children: [
// isto apresentará o `UserList` para estas 3 URLs
// - /users
// - /users/list
// - /people
{ path: '', component: UserList, alias: ['/people', 'list'] },
],
},
]
Se a tua rota tiver parâmetros, certifica-te de incluí-las em qualquer pseudónimo absoluto:
const routes = [
{
path: '/users/:id',
component: UsersByIdLayout,
children: [
// isto apresentará o `UserDetails` para estas 3 URLs
// - /users/24
// - /users/24/profile
// - /24
{ path: 'profile', component: UserDetails, alias: ['/:id', ''] },
],
},
]
const routes = [
{
path: '/users/:id',
component: UsersByIdLayout,
children: [
// isto apresentará o `UserDetails` para estas 3 URLs
// - /users/24
// - /users/24/profile
// - /24
{ path: 'profile', component: UserDetails, alias: ['/:id', ''] },
],
},
]
Nota sobre SEO: quando estiveres a usar os pseudónimos, certifica-te de definir ligações canónicas.