As seções a seguir destacam alguns conceitos e terminologias centrais do router.
Eventos do Router
Durante cada navegação, o Router emite eventos de navegação através da propriedade Router.events.
Estes eventos são mostrados na tabela a seguir.
| Evento do Router | Detalhes |
|---|---|
NavigationStart |
Acionado quando a navegação começa. |
RouteConfigLoadStart |
Acionado antes do Router fazer lazy load de uma configuração de rota. |
RouteConfigLoadEnd |
Acionado após uma rota ter sido carregada com lazy loading. |
RoutesRecognized |
Acionado quando o Router analisa a URL e as rotas são reconhecidas. |
GuardsCheckStart |
Acionado quando o Router inicia a fase de Guards do routing. |
ChildActivationStart |
Acionado quando o Router inicia a ativação dos filhos de uma rota. |
ActivationStart |
Acionado quando o Router inicia a ativação de uma rota. |
GuardsCheckEnd |
Acionado quando o Router finaliza a fase de Guards do routing com sucesso. |
ResolveStart |
Acionado quando o Router inicia a fase de Resolve do routing. |
ResolveEnd |
Acionado quando o Router finaliza a fase de Resolve do routing com sucesso. |
ChildActivationEnd |
Acionado quando o Router finaliza a ativação dos filhos de uma rota. |
ActivationEnd |
Acionado quando o Router finaliza a ativação de uma rota. |
NavigationEnd |
Acionado quando a navegação termina com sucesso. |
NavigationCancel |
Acionado quando a navegação é cancelada. Isso pode acontecer quando um Route Guard retorna false durante a navegação, ou redireciona retornando um UrlTree ou RedirectCommand. |
NavigationError |
Acionado quando a navegação falha devido a um erro inesperado. |
Scroll |
Representa um evento de scroll. |
Quando você habilita a feature withDebugTracing, o Angular registra esses eventos no console.
Terminologia do Router
Aqui estão os termos-chave do Router e seus significados:
| Parte do Router | Detalhes |
|---|---|
Router |
Exibe o component da aplicação para a URL ativa. Gerencia a navegação de um component para o próximo. |
provideRouter |
Fornece os service providers necessários para navegar através de views da aplicação. |
RouterModule |
Um NgModule separado que fornece os service providers e directives necessários para navegar através de views da aplicação. |
Routes |
Define um array de Routes, cada uma mapeando um caminho de URL para um component. |
Route |
Define como o router deve navegar para um component baseado em um padrão de URL. A maioria das rotas consiste de um caminho e um tipo de component. |
RouterOutlet |
A directive (<router-outlet>) que marca onde o router exibe uma view. |
RouterLink |
A directive para vincular um elemento HTML clicável a uma rota. Clicar em um elemento com uma directive routerLink vinculada a uma string ou a um array de parâmetros de link aciona uma navegação. |
RouterLinkActive |
A directive para adicionar/remover classes de um elemento HTML quando um routerLink associado contido no elemento ou dentro dele se torna ativo/inativo. Também pode definir o aria-current de um link ativo para melhor acessibilidade. |
ActivatedRoute |
Um service fornecido para cada route component que contém informações específicas da rota como parâmetros de rota, dados estáticos, dados de resolve, parâmetros de query globais e o fragmento global. |
RouterState |
O estado atual do router incluindo uma árvore das rotas atualmente ativadas junto com métodos convenientes para percorrer a árvore de rotas. |
| Array de parâmetros de link | Um array que o router interpreta como uma instrução de routing. Você pode vincular esse array a um RouterLink ou passar o array como argumento para o método Router.navigate. |
| Routing component | Um component Angular com um RouterOutlet que exibe views baseado em navegações do router. |
<base href>
O router usa o history.pushState do navegador para navegação.
pushState permite personalizar caminhos de URL dentro da aplicação; por exemplo, localhost:4200/crisis-center.
As URLs dentro da aplicação podem ser indistinguíveis de URLs do servidor.
Os navegadores HTML5 modernos foram os primeiros a suportar pushState, razão pela qual muitas pessoas se referem a essas URLs como URLs "estilo HTML5".
DICA: A navegação estilo HTML5 é o padrão do router.
Na seção LocationStrategy e estilos de URL do browser, saiba por que o estilo HTML5 é preferível, como ajustar seu comportamento e como mudar para o estilo hash (#) mais antigo, se necessário.
Você deve adicionar um elemento <base href> ao index.html da aplicação para que o routing pushState funcione.
O navegador usa o valor <base href> para prefixar URLs relativas ao referenciar arquivos CSS, scripts e imagens.
Adicione o elemento <base> logo após a tag <head>.
Se a pasta app é a raiz da aplicação, como é para esta aplicação, defina o valor href em index.html como mostrado aqui.
src/index.html (base-href)
<!DOCTYPE html><html lang="en"> <head> <!-- Set the base href --> <base href="/"> <title>Angular Router</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <app-root></app-root> </body></html>
URLs HTML5 e o <base href>
As diretrizes a seguir farão referência a diferentes partes de uma URL. Este diagrama descreve a que essas partes se referem:
foo://example.com:8042/over/there?name=ferret#nose\_/ \______________/\_________/ \_________/ \__/ | | | | |scheme authority path query fragment
Embora o router use o estilo HTML5 pushState por padrão, você deve configurar essa strategy com um <base href>.
A forma preferida de configurar a strategy é adicionar uma tag <base href> no <head> do index.html.
<base href="/">
Sem essa tag, o navegador pode não conseguir carregar recursos (imagens, CSS, scripts) ao fazer "deep linking" na aplicação.
Alguns desenvolvedores podem não conseguir adicionar o elemento <base>, talvez porque não tenham acesso ao <head> ou ao index.html.
Esses desenvolvedores ainda podem usar URLs HTML5 seguindo os dois passos a seguir:
- Fornecer ao router um valor
APP_BASE_HREFapropriado. - Usar URLs raiz (URLs com uma
authority) para todos os recursos web: CSS, imagens, scripts e arquivos HTML de template.O
pathdo<base href>deve terminar com "/", pois os navegadores ignoram caracteres nopathque seguem o "/" mais à direitaSe o
<base href>incluir uma partequery, aquerysó é usada se opathde um link na página estiver vazio e não tiverquery. Isso significa que umaqueryno<base href>só é incluída ao usarHashLocationStrategy.Se um link na página for uma URL raiz (tem uma
authority), o<base href>não é usado. Desta forma, umAPP_BASE_HREFcom uma authority fará com que todos os links criados pelo Angular ignorem o valor<base href>.Um fragment no
<base href>nunca é persistido
Para informações mais completas sobre como <base href> é usado para construir URIs de destino, veja a seção RFC sobre transformação de referências.
HashLocationStrategy
Use HashLocationStrategy fornecendo useHash: true em um objeto como segundo argumento do RouterModule.forRoot() no AppModule.
providers: [ provideRouter(appRoutes, withHashLocation())]
Ao usar RouterModule.forRoot, isso é configurado com useHash: true no segundo argumento: RouterModule.forRoot(routes, {useHash: true}).