Experts in Angular

Dúvidas ComunsComo gerenciar rotas em uma aplicação Angular?
Como gerenciar rotas em uma aplicação Angular?

Como gerenciar rotas em uma aplicação Angular?

No Angular, o roteamento é como um mapa que guia os usuários pela sua aplicação.
Para configurá-lo, importe o módulo RouterModule, defina suas rotas e use a diretiva router-outlet para exibir o conteúdo.
Crie links de navegação com routerLink e passe parâmetros entre componentes usando ActivatedRoute.
Com o roteamento, sua aplicação se torna mais organizada e fácil de navegar.

Resposta Longa:

Gerenciando Rotas em uma Aplicação Angular

O sistema de roteamento do Angular permite que diferentes componentes sejam exibidos com base na URL, sem a necessidade de recarregar a página inteira. Vamos explorar como configurar e utilizar o roteamento no Angular, cobrindo desde os conceitos básicos até práticas avançadas.

Introdução ao Roteamento

Em uma SPA, você muda o que o usuário vê ao mostrar ou esconder partes da interface que correspondem a componentes específicos, em vez de buscar uma nova página no servidor.
À medida que os usuários interagem com a aplicação, eles precisam navegar entre as diferentes visualizações que você definiu.
O Angular Router facilita essa navegação, interpretando a URL do navegador como uma instrução para alterar a visualização.

Tarefas Comuns de Roteamento

A seguir, detalhamos como implementar várias tarefas comuns associadas ao roteamento no Angular:

  • Gerar uma aplicação com roteamento habilitado
  • Adicionar componentes para roteamento
  • Definir rotas básicas
  • Gerenciar a ordem das rotas
  • Configurar rotas coringa e redirecionamentos
  • Aninhar rotas
  • Definir o título da página
  • Utilizar caminhos relativos
  • Acessar parâmetros de rota e fragmentos
  • Carregamento sob demanda (Lazy Loading)
  • Impedir acesso não autorizado

Gerando uma Aplicação com Roteamento Habilitado

Você pode gerar uma nova aplicação Angular com suporte a roteamento utilizando o Angular CLI. O comando abaixo cria uma aplicação chamada routing-app com o roteamento habilitado:

ng new routing-app --routing

Adicionando Componentes para Roteamento

Para utilizar o Angular Router, uma aplicação precisa ter pelo menos dois componentes, permitindo a navegação entre eles. Use o Angular CLI para gerar componentes:

ng generate component first
ng generate component second

Definindo Rotas Básicas

O roteamento no Angular é configurado através de um array de objetos Routes, onde cada rota é um objeto JavaScript que define o caminho (path) e o componente a ser exibido (component):

import { Routes } from '@angular/router';
import { FirstComponent } from './first/first.component';
import { SecondComponent } from './second/second.component';

export const routes: Routes = [
  { path: 'first-component', component: FirstComponent },
  { path: 'second-component', component: SecondComponent },
];

Essas rotas devem ser importadas e fornecidas à aplicação através do provideRouter:

import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';

export const appConfig: ApplicationConfig = {
  providers: [provideRouter(routes)],
};

Gerenciando a Ordem das Rotas

A ordem das rotas é crucial porque o Angular Router usa uma estratégia de “primeiro a coincidir ganha”. Portanto, rotas mais específicas devem ser listadas antes das rotas menos específicas. Rotas com caminhos estáticos devem vir primeiro, seguidas por rotas com caminho vazio (rota padrão), e por fim, a rota coringa (**), que corresponde a qualquer URL que não tenha correspondido a nenhuma das rotas anteriores.

Configurando Rotas Curinga e Redirecionamentos

Uma boa prática é configurar uma rota coringa para lidar com URLs não correspondentes, redirecionando o usuário para uma página 404 ou outra rota predefinida:

const routes: Routes = [
  { path: 'first-component', component: FirstComponent },
  { path: 'second-component', component: SecondComponent },
  { path: '', redirectTo: '/first-component', pathMatch: 'full' }, // Redirecionamento
  { path: '**', component: PageNotFoundComponent },  // Rota coringa
];

Aninhando Rotas

Rotas aninhadas permitem criar hierarquias de navegação dentro de componentes. Por exemplo, o componente FirstComponent pode ter suas próprias rotas filhas:

const routes: Routes = [
  {
    path: 'first-component',
    component: FirstComponent,
    children: [
      { path: 'child-a', component: ChildAComponent },
      { path: 'child-b', component: ChildBComponent },
    ],
  },
];

Definindo o Título da Página

Cada página deve ter um título único, que pode ser definido diretamente na configuração da rota:

const routes: Routes = [
  {
    path: 'first-component',
    title: 'First Component',
    component: FirstComponent,
    children: [
      { path: 'child-a', title: 'Child A', component: ChildAComponent },
      { path: 'child-b', title: 'Child B', component: ChildBComponent },
    ],
  },
];

Utilizando Caminhos Relativos

Caminhos relativos permitem navegar em relação ao segmento de URL atual. Por exemplo, para navegar para o SecondComponent a partir do FirstComponent, use ../ para subir um nível na hierarquia de URLs:

<a routerLink="../second-component">Ir para o Segundo Componente</a>

Acessando Parâmetros de Rota e Fragmentos

Você pode acessar parâmetros de rota e fragmentos utilizando o serviço ActivatedRoute:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-product-detail',
  templateUrl: './product-detail.component.html'
})
export class ProductDetailComponent implements OnInit {
  productId: string;

  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    this.route.paramMap.subscribe(params => {
      this.productId = params.get('id');
    });
  }
}

Carregamento Sob Demanda (Lazy Loading)

Lazy loading permite que módulos sejam carregados sob demanda, o que pode melhorar significativamente o desempenho da aplicação. Para configurar lazy loading, utilize a propriedade loadChildren em vez de component ao definir uma rota:

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

Impedindo Acesso Não Autorizado

Use guardiões de rota (route guards) para impedir que usuários não autorizados acessem certas rotas. Por exemplo, você pode usar CanActivate para proteger uma rota:

const routes: Routes = [
  {
    path: 'admin',
    component: AdminComponent,
    canActivate: [AuthGuard]
  }
];

Conclusão

O gerenciamento de rotas no Angular é uma ferramenta poderosa para criar aplicações dinâmicas e interativas. Ao entender e utilizar o sistema de roteamento de maneira eficaz, você pode melhorar a experiência do usuário e organizar melhor sua aplicação.