Conteúdo
O que é Reactive Forms – Angular
Reactive forms é uma abordagem orientada a modelos para construção de formulários no Angular. Desta forma o modelo é criado na classe do componente é mostrado no HTML com um markup especial para ele.
Ele consiste em alguns blocos:
- FormGroup;
- FormArray;
- FormControl.
FormControl
É um campo único de entrada em um formulário Angular. Como assim, vamos ao exemplo:
Nós podemos usar o FormControl para pegar e setar valores no campo, achar status e adicionar regras de validações. Usando a diretiva de ngModel para isso.
Para criar um FormControl, usamos o seguinte “new FormControl()”.
Quando temos um novo objeto, podemos acessar os seus valores com um simples ponto, assim:
Podemos também checar os status de validação da seguinte forma:
Mas o que faz valid, dirty e touched.
- Valid: O valor que vem do campo passa por todas as validações e é marcado como Valid;
- Dirty: Quando o usuário muda o valor, ele é marcado como Dirty;
- Touched: Quando o usuário interage com o campo ou clicar fora dele.
Nós podemos usar o construtor para passar um valor inicial e validado.
No exemplo acima o valor inicial é ‘Dener Troquatte’ e tem que ter no mínimo 3 caracteres.
FormGroup
Pensa como se FormGroup fosse um grupo de FormsControls e cada FormControl é uma propriedade.
Em sua maioria os formulários têm mais de um campo, então temos que deixar uma maneira simples de gerenciar tudo isso.
Pensa no seguinte exemplo:
Cada campo é um FormControl separado, imagina se precisássemos validar cada campo individualmente, com o FormGroup resolvemos esse problema, ele envolve cada FormControl e podemos trackear individualmente cada child.
Podemos especificar individualmente cada FormControl no construtor do FormGroup.
Também podemos passar valores iniciais e validações para cada FormControl.
Se uma parte do formulário for inválida, o grupo todo é falho na validação.
Podemos usar a propriedade de value para acessar e controlar os valores e assim ele retorna um objeto com todos os valores do grupo.
Também podemos acessar cada valor individualmente com o “.get()”.
E também podemos usar as validações como o “.valid”, “.dirty”, “.touched” e “.error”.
FormArray
É bem parecido com o FormGroup.
- O FormGroup contém o controle como uma única propriedade;
- O FormArray contém um array de controles como uma propriedade.
É útil para listas, como data de aniversário e endereços como estados e países. E podemos criá-los desta forma.
Podemos pegar a referência do array com o “get()”.
E também como o FormControl e FormGroup, podemos checar os status do array, com o “valid”, “dirty”, “touched” e “error”.
Reactive Form – O que é Reactive forms
Vamos ver um exemplo prático de como usar.
Não podemos esquecer de importar o “ReactiveFormsModule” do “@angular/forms” e importar no array de App Module.
Vamos criar o nosso form model dentro da nossa classe de componentes.
No exemplo acima, importamos o FormGroup e FormControl e criamos um grupo com dois controles.
Agora vamos para view e criar uma estrutura simples que receberá nosso form.
Vamos pontuar algumas coisas sobre o exemplo acima:
- Associamos o nosso modelo usando o “formGroup” com o nome e valor do grupo;
- Dizemos ao Angular que ao enviar o form com ngSubmit, neste caso chamamos o método “onSubmit()” (que ainda não existe);
- Nós linkamos os campos correspondentes com o formControlName .
Agora precisamos criar o “onSubmit()”.
Para manter tudo simples, ele apenas mostra um console.log.
Validadores – O que é Reactive forms
Como já vimos no FormControl, é fácil adicionar os validadores.
Vamos importar o Validators module no “@angular/forms” e adicionamos o validator que queremos como segundo argumento.
No exemplo acima, os campos requerem no mínimo 3 caracteres para ser aceito.
Neste exemplo o botão de enviar é desabilitado até que os requisitos sejam concluídos.
Reset – O que é Reactive forms
Nós podemos usar o método “reset()” para resetar todos os controles do grupo.
Ao clicar no botão resete o método “onReset()” é chamado.
Simplesmente o método “onReset()” invoca o “reset()” do FormGroup e tudo é limpo como esperado. Então agora você sabe o que é Reactive forms Angular.