🚀 Capítulo 06: Diretivas de Atributo
🎯 Objetivo da Aula
Ao final desta aula, você será capaz de alterar a aparência e o estilo dos elementos do seu HTML dinamicamente usando as diretivas de atributo do Angular: ngClass e ngStyle.
🏢 O Cenário Prático (Seu Desafio)
O painel da sua nave precisa mudar de cor visualmente para alertar o piloto! Se os sistemas estiverem seguros, o painel deve ter uma borda verde. Se estiver em modo de combate, a borda deve ficar vermelha piscante. Vamos usar CSS dinâmico para resolver isso!
🧠 Fundamentos: A Teoria Traduzida
Diferente das diretivas estruturais (que colocam ou tiram coisas da tela), as diretivas de atributo apenas mudam a aparência ou o comportamento de um elemento que já existe.
1. ngStyle (Estilo Inline Dinâmico)
Serve para aplicar estilos CSS diretamente na tag baseado em variáveis do TypeScript.
- Sintaxe:
[ngStyle]="{'propriedade-css': valor}" - Exemplo:
[ngStyle]="{'color': energia < 20 ? 'red' : 'green'}"
2. ngClass (Classes CSS Dinâmicas)
Serve para adicionar ou remover classes CSS inteiras baseado em uma condição. É muito melhor que o ngStyle quando você tem muitos estilos para mudar de uma vez.
- Sintaxe:
[ngClass]="{'nome-da-classe': condicao}" - Exemplo:
[ngClass]="{'alerta-ativo': emCombate}"(A classealerta-ativosó será aplicada seemCombatefor true).
📖 Exemplo Guiado: Mudando a Cor do Painel
Vamos criar classes CSS e alterná-las.
🛠️ Passo a Passo (CSS)
Abra src/app/painel-controle/painel-controle.component.css e adicione as classes:
.painel-padrao {
border: 2px solid gray;
padding: 10px;
}
.modo-perigo {
border: 2px solid red;
background-color: #ffcccc;
}🛠️ Passo a Passo (TypeScript)
Abra src/app/painel-controle/painel-controle.component.ts:
export class PainelControleComponent {
emCombate: boolean = false;
}🛠️ Passo a Passo (HTML)
Abra src/app/painel-controle/painel-controle.component.html:
<!-- Aplicando a classe painel-padrao sempre, e a modo-perigo se emCombate for true -->
<div class="painel-padrao" [ngClass]="{'modo-perigo': emCombate}">
<h2>Status da Nave</h2>
<button (click)="emCombate = !emCombate">
Alternar Modo de Combate
</button>
</div>🕹️ Como Executar e Testar no VS Code
- Salve tudo e clique no botão no navegador.
- Veja a borda e o fundo da caixa mudarem de cor instantaneamente ao clicar!
🛠️ Prática Obrigatória 1
Use o ngStyle para fazer com que a barra de energia mude de tamanho.
No HTML, crie uma div simulando uma barra. Use [ngStyle]="{'width': nivelEnergia + '%'}" para que a largura da barra mude se você alterar a variável nivelEnergia (como fizemos na aula passada).
🛠️ Prática Obrigatória 2
Crie uma classe CSS chamada .texto-suave com uma cor cinza. Use o ngClass para aplicar essa classe em um texto se a variável modoSilencioso for true.
🔑 Gabarito de Código/Fórmulas
Prática 1:
No .html:
<div style="background-color: gray; width: 200px;">
<!-- Barra interna que cresce -->
<div [ngStyle]="{'width': nivelEnergia + '%', 'background-color': 'blue'}">
Energia
</div>
</div>Prática 2:
No .css:
.texto-suave {
color: #888;
font-style: italic;
}No .html:
<p [ngClass]="{'texto-suave': modoSilencioso}">
Este é um sistema de comunicação discreto.
</p>