Nessa aula vamos reelaborar nosso formulário para usar o sistema de formulários reativos do Angular adicionando mais validadores, na próxima aula veremos validações avançadas usando os formulários reativos. Para nossos estudos vamos salvar os itens no localstorage.

O que é um formulário reativo? Um formulário reativo é baseado na construção de instâncias do tipo FormGroup e FormControl e, a partir disso, é possível criar formulários dinâmicos e mais complexos.

Em um formulário reativo não precisamos fazer o binding diretamente usando [(ngModel]), mas sim usamos a diretiva formControlName para dizer qual propriedade de um formgroup será associada ao conteúdo do componente ou input.

Ao contrário do formulário template-driven, o formulário reativo é criado programaticamente no código TypeScript e não depende diretamente do template HTML para ser criado e validado. Isso traz mais flexibilidade e controle para a criação de formulários e, em geral, é recomendado para aplicações que precisam de validações e lógicas mais avançadas.

Com o formulário reativo, é possível criar validações personalizadas, reagir a mudanças em campos específicos, criar formulários com campos dependentes e mais complexos, além de ser mais fácil de testar e de trabalhar em equipe.

Em resumo, o formulário reativo é uma abordagem mais programática e flexível para construir formulários em aplicações Angular, trazendo mais controle e poder para as validações e lógicas de interação com o usuário.

Transformando o formulário anterior em reativo

Vamos recriar o mesmo formulário de pessoa. Para isso, adicione um novo componente: pessoa-add-reactive.ts  e seu correspondente html.

No componente, adicione:

O código acima cria um FormGroup em que cada propriedade é um FormControl que recebe um array contendo o valor inicial, nesse caso, string vazia para todos, e opcionalmente validações e outras informações.

Poderíamos criar os elementos diretamente como New FormGroup e New FormControl mas a maneira mais rápida de se fazer é através de um FormBuilder conforme recebemos um no construtor.

Nosso método, salvar verifica se o formulário está válido e executa e apresenta uma mensagem apropriada, mas não estamos validando nada por enquanto.

Vamos ver o html:

Repare nas diferenças entre um formulário template driven: