📝

Módulo 14: Formulários Reativos I (Estrutura e Validação)

2. Resumo da Aula Anterior

No Módulo 13, fechamos o ciclo CRUD com pedidos POST, PUT e DELETE. Agora, precisamos de uma forma profissional de recolher esses dados do utilizador. Entra o mundo dos Formulários Reativos.

3. O Que Vais Aprender Hoje

4. Teoria: O Controlo é Teu

Conceito: Nos Formulários Reativos, tu crias a árvore do formulário no código TypeScript. Isto dá-te controlo total sobre o estado do campo (está sujo? está válido? mudou o valor?) sem dependeres apenas do HTML.

✍️ Analogia: O Formulário das Finanças vs O Caderno de Notas

Imagina dois tipos de formulários:

  • Template Driven (O Caderno): Tu escreves no papel e só quando entregas é que alguém vê se está bem. O papel (HTML) manda.
  • Reactive Forms (As Finanças Online): À medida que escreves cada letra, há um sistema informático (TypeScript) a validar em tempo real. O sistema sabe exatamente em que campo estás e pode bloquear o botão "Enviar" no mesmo milissegundo em que cometes um erro.

5. Exemplos Práticos

Exemplo 1: Setup da Classe

Importar o ReactiveFormsModule e definir a estrutura.

import { FormGroup, FormControl, Validators } from '@angular/forms';

meuForm = new FormGroup({
  nome: new FormControl('', Validators.required),
  email: new FormControl('', [Validators.required, Validators.email])
});

submit() {
  console.log(this.meuForm.value);
}

Exemplo 2: Ligação ao HTML

Usar a diretiva formGroup e formControlName.

<form [formGroup]="meuForm" (ngSubmit)="submit()">
  <input formControlName="nome" placeholder="Nome">
  <input formControlName="email" placeholder="Email">

  <button type="submit" [disabled]="!meuForm.valid">Enviar</button>
</form>

Exemplo 3: Mostrar Erros

Avisar o utilizador de forma amigável.

<div *ngIf="meuForm.get('email')?.errors?.['email']">
  Este email não é válido!
</div>

6. Agora é a Tua Vez!

Vamos criar o "Formulário de Registo Heróico":

  1. Importa o ReactiveFormsModule no teu componente Standalone.
  2. Cria um FormGroup com três campos: nickname (mínimo 4 letras), idade (obrigatório) e poder.
  3. No HTML, liga os inputs aos nomes que definiste no TypeScript.
  4. Cria uma mensagem de erro que só aparece se o nickname tiver menos de 4 letras e já tiver sido tocado (touched).
  5. Desativa o botão de submeter enquanto o formulário for inválido.

7. Verificação de Conhecimento

Carregando quiz...

8. Resumo do Que Aprendemos

9. Desafios Práticos

Desafio 1: O Botão Teimoso

Porque é que se recomenda desativar o botão de Submit baseando-se no meuForm.valid em vez de validar apenas no clique?

Desafio 2: Valor vs Controlo

Como farias para limpar (ficar vazio) apenas um campo específico do formulário sem mexer nos outros?

Desafio 3: Reatividade Real

É possível ouvir as mudanças de um formulário em tempo real (tipo um Observable) enquanto o utilizador escreve?

« Aula Anterior Próxima Aula »