Atualizado: 03/01/2025

Criando Links - Angular

Para facilitar a navegação entre diferentes partes da aplicação, geralmente se usa um sistema de navegação composto por links. Por exemplo, vamos considerar o seguinte projeto mencionado no tema anterior:

helloapp/
├── src/
│   ├── app/
│   │   ├── about.component.ts
│   │   ├── app.component.ts
│   │   ├── app.config.ts
│   │   ├── home.component.ts
│   │   ├── not-found.component.ts
│   ├── main.ts  
│   ├── index.html 
├── angular.json    
├── package-lock.json
├── package.json
└── tsconfig.json

No tema anterior, no arquivo app.config.ts foram definidas três rotas:

import { ApplicationConfig } from "@angular/core";
import { provideRouter, Routes } from "@angular/router";

import { HomeComponent } from "./home.component";
import { AboutComponent } from "./about.component";
import { NotFoundComponent } from "./not-found.component";

// definição de rotas
const appRoutes: Routes = [
    { path: "", component: HomeComponent },
    { path: "about", component: AboutComponent },
    { path: "**", component: NotFoundComponent }
];

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

Os componentes HomeComponent e AboutComponent representam, respectivamente, as páginas inicial e sobre da aplicação. O processamento de cada um deles é responsável por gerar o conteúdo que será inserido no template do componente principal, o AppComponent.

Agora, vamos adicionar a navegação ao projeto. Para isso, no AppComponent, definimos um conjunto de links para navegação:

import { Component } from "@angular/core";
import { RouterOutlet, RouterLink } from "@angular/router";

@Component({
    selector: "my-app",
    standalone: true,
    imports: [RouterOutlet, RouterLink],
    styles: `a {padding: 5px;}`,
    template: `<div>
                    <nav>
                        <a routerLink="">Início</a>
                        <a routerLink="/about">Sobre o site</a>
                    </nav>
                    <router-outlet></router-outlet>
                </div>`,
})
export class AppComponent {}

A diretiva routerLink, importada do pacote @angular/router, é usada para definir os endereços dos links.

De acordo com a primeira rota, o HomeComponent processa as requisições de URLs sem segmentos, por isso, para criar o link para esse componente, utilizamos uma string vazia: <a routerLink="">.

O AboutComponent processa requisições que contêm "about" no endereço, logo, o link correspondente é <a routerLink="/about">. Vale destacar o uso da barra / no início do endereço. Quando definimos o conjunto de links no componente principal AppComponent, a barra inicial pode ser omitida. No entanto, se os links forem definidos em componentes filhos, como no AboutComponent, a ausência da barra pode resultar em um caminho incorreto. A barra ajuda a definir o caminho relativo à raiz da aplicação.

Navegação em Angular

Estilizando Links Ativos

Para estilizar links ativos, usamos a diretiva especial routerLinkActive, que aplica uma classe CSS ao link ativo. Vamos alterar a classe do componente para incluir a estilização:

import { Component } from "@angular/core";
import { RouterOutlet, RouterLink, RouterLinkActive } from "@angular/router";

@Component({
    selector: "my-app",
    standalone: true,
    imports: [RouterOutlet, RouterLink, RouterLinkActive],
    styles: `a {padding: 5px;}
              .active {color: red;}`,
    template: `<div>
                    <nav>
                        <a routerLink="" routerLinkActive="active">Início</a>
                        <a routerLink="/about" routerLinkActive="active">Sobre o site</a>
                    </nav>
                    <router-outlet></router-outlet>
                </div>`,
})
export class AppComponent {}
Links Ativos em Angular

No entanto, devemos considerar um detalhe importante ao estilizar os links. Quando clicamos no link "Sobre o site", ambos os links acabam sendo estilizados:

routerLinkActive em Angular

Isso ocorre porque o caminho da primeira rota routerLink="" coincide com o URL da segunda rota routerLink="/about", já que o primeiro caminho pode ser interpretado como qualquer outro caminho.

Para resolver isso, usamos a diretiva routerLinkActiveOptions para fazer ajustes adicionais:

<nav>
  <a routerLink="" routerLinkActive="active"
      [routerLinkActiveOptions]="{exact:true}">Início</a>
  <a routerLink="/about" routerLinkActive="active">Sobre o site</a>
</nav>

O valor {exact:true} indica que a correspondência completa do caminho será necessária para definir o link como ativo.

Assim, garantimos que apenas o link correspondente ao URL exato seja estilizado como ativo.

routerLinkActiveOptions em Angular
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com