Skip to content
On this page

Rotas Encaixadas

Algumas UIs da aplicação são compostas de componentes que são encaixados vários níveis de profundidade. Neste caso, é muito comum que os segmentos de uma URL corresponda à uma certa estrutura de componentes encaixados, por exemplo:

Com a Vue Router, podes expressar este relacionamento usando as configurações de rota encaixada.

Dada a aplicação que criamos no último capítulo:

O <router-view> aqui é um router-view de alto nível. Ele apresenta o componente correspondido por uma rota de alto nível. Similarmente, o componente apresentado também pode conter o seu próprio, <router-view> encaixado. Por exemplo, se adicionarmos um dentro do modelo de marcação do componente User:

Para apresentar os componentes dentro deste router-view encaixado, precisamos usar a opção children em quaisquer das rotas:

Nota que caminhos encaixados que começam com / serão tratados como um caminho de raiz. Isto permite-te influenciar o encaixamento do componente sem ter de usar uma URL encaixada.

Conforme podes ver a opção children é apenas um outro arranjo de rotas como o próprio routes. Portanto, podes continuar a encaixar as visões tanto quanto precisares.

Até este ponto, com a configuração acima, quando visitas /user/eduardo, nada será apresentado dentro da router-view do User, porque nenhuma rota encaixada é correspondida. Talvez queiras apresentar alguma coisa lá. Em tal caso podes fornecer um caminho encaixado vazio:

Uma demonstração em funcionamento deste exemplo pode ser encontrada nesta ligação.

Rotas Encaixadas Nomeadas

Quando estamos a lidar com Rotas Nomeadas, normalmente nomeias as rotas filhas:

Isto garantira que a navegação para /user/:id sempre exibirá a rota encaixada.

Em alguns cenários, podes querer navegar para uma rota nomeada sem navegar para a rota encaixada. Por exemplo, se quiseres navegar para /user/:id sem exibir a rota encaixada. Neste caso, também podes nomear a rota pai mas nota que ao recarregar a página sempre exibirá a filha encaixada já que é considerada uma navegação para o caminho /users/:id ao invés da rota nomeada: