Aula 9

Angular

Roteamento

Roteamento

O roteamento no Angular permite navegar entre componentes com base na URL. Ele transforma a SPA (Single Page Application) em uma aplicação com múltiplas "páginas virtuais".

1. Configuração Inicial

Crie um módulo de roteamento ou use o AppRoutingModule:

// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { SobreComponent } from './sobre/sobre.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'sobre', component: SobreComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

2. Definindo Áreas de Navegação

Use a diretiva <router-outlet> para indicar onde os componentes serão carregados.

<!-- app.component.html -->
<nav>
  <a routerLink="/">Home</a>
  <a routerLink="/sobre">Sobre</a>
</nav>

<router-outlet></router-outlet>

3. Redirecionamento

Você pode redirecionar rotas vazias ou erradas:

const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: '**', component: PaginaNaoEncontradaComponent }
];

4. Roteamento com Parâmetros

4.1 Rota com parâmetro

const routes: Routes = [
  { path: 'produto/:id', component: ProdutoDetalheComponent }
];

4.2 Navegar com parâmetro

this.router.navigate(['/produto', 10]);

4.3 Ler parâmetro no componente

import { ActivatedRoute } from '@angular/router';

constructor(private route: ActivatedRoute) {}

ngOnInit() {
  this.route.paramMap.subscribe(params => {
    const id = params.get('id');
    console.log('ID:', id);
  });
}

5. Query Params

5.1 Enviar:

this.router.navigate(['/produtos'], { queryParams: { categoria: 'teclados', precoMax: 500 } });

5.2 Ler:

this.route.queryParamMap.subscribe(params => {
  const categoria = params.get('categoria');
  const precoMax = params.get('precoMax');
});

6. Passagem de dados com state

6.1 Enviar:

this.router.navigate(['/perfil'], { state: { usuario: 'Carlos', nivel: 'admin' } });

6.2 Receber:

ngOnInit() {
  const usuario = history.state.usuario;
  const nivel = history.state.nivel;
  console.log(usuario, nivel);
}

7. Rotas Filhas

const routes: Routes = [
  {
    path: 'admin',
    component: AdminComponent,
    children: [
      { path: 'usuarios', component: UsuariosComponent },
      { path: 'configuracoes', component: ConfiguracoesComponent }
    ]
  }
];

Em admin.component.html:

<router-outlet></router-outlet>

8. Lazy Loading (Carregamento Preguiçoso)

Usado para carregar módulos apenas quando necessário.

const routes: Routes = [
  {
    path: 'relatorios',
    loadChildren: () => import('./relatorios/relatorios.module').then(m => m.RelatoriosModule)
  }
];