🚀

Módulo 19: Signals I (A Nova Reatividade)

2. Resumo da Aula Anterior

No Módulo 18, protegemos o nosso site com Guards e Interceptors. Agora, entramos na "Nova Era" do Angular. Vamos aprender sobre os Signals, a funcionalidade que veio mudar a forma como o Angular gere os dados e o torna mais rápido do que nunca.

3. O Que Vais Aprender Hoje

4. Teoria: Reatividade com Lupa

Conceito: Antigamente, quando mudavas uma variável, o Angular tinha de percorrer a árvore de componentes inteira para ver o que tinha mudado. Com Signals, o Angular sabe exatamente qual pedaço do HTML precisa de ser atualizado. Isto chama-se "Fine-grained Reactivity".

🔔 Analogia: O Sino de Serviço

Imagina uma recepção de hotel:

  • Variáveis Normais: O recepcionista tem de olhar para todas as portas do hotel a cada 5 segundos para ver se algum cliente precisa de ajuda. É cansativo e ineficaz.
  • Signals (O Sino): Cada cliente tem um sino. O recepcionista pode estar a dormir; se o sino da Porta 4 tocar, ele acorda e vai **diretamente** à Porta 4. Ele não perde tempo a olhar para as outras 99 portas.

5. Exemplos Práticos

Exemplo 1: Criar e Ler

O signal é uma função que guarda um valor.

import { signal } from '@angular/core';

nome = signal('Antigravity');

// Ler no TypeScript:
console.log(this.nome()); 

Exemplo 2: Mudar o Valor

Duas formas de atualizar: .set() e .update().

// Substituir tudo:
this.nome.set('Novo Nome');

// Usar o valor antigo para calcular o novo:
this.contador = signal(0);
this.contador.update(v => v + 1);

Exemplo 3: No HTML

Não te esqueças dos parêntesis!

<h1>Bem-vindo, {{ nome() }}!</h1>
<p>Contagem: {{ contador() }}</p>

<button (click)="contador.update(v => v + 1)">
  Aumentar
</button>

6. Agora é a Tua Vez!

Vamos criar o "Contador de Energia Futurista":

  1. Cria um Signal chamado energia com o valor inicial de 100.
  2. No HTML, mostra o valor da energia. Lembra-te: {{ energia() }}.
  3. Cria um botão "Gastar Energia" que faz update subtraindo 10 ao valor.
  4. Cria um botão "Recarregar" que faz set para voltar a 100.
  5. Adiciona um *ngIf que mostra uma mensagem de "Aviso: Bateria Fraca" se energia() < 20.

7. Verificação de Conhecimento

Carregando quiz...

8. Resumo do Que Aprendemos

9. Desafios Práticos

Desafio 1: O Parêntesis Esquecido

O que acontece se escreveres {{ nome }} (sem parêntesis) no HTML para um Signal?

Desafio 2: Performance Máxima

É possível usar Signals com a estratégia OnPush de deteção de mudanças? Qual a vantagem?

Desafio 3: Lista de Compras

Se tiveres um Signal que guarda um **Array** (ex: ['Pão', 'Leite']) e quiseres adicionar um item, deves usar set ou update? Como farias para o Angular "perceber" a mudança?

« Aula Anterior Próxima Aula »