Formulário Simples
Vamos entender de uma vez por todas que forma "diferentona" é essa de que tanto estamos falando.
Pré-requisitos
Leia a página anterior Reactive Forms (Formulários Reativos)
Acesse angular-forms-example e faça download do projeto
Leia atentamente o README.md
Estrutura de páginas
Reactive Forms
Formulário Simples
Atualmente são apenas duas páginas, mas ao longo dos tutoriais outras serão desenvolvidas.

Inicializando a aplicação
Após carregar acesse http://localhost:4200/ leia atentamente o conteúdo da página Reactive Forms, em seguida navegue para a página Formulário Simples, leia e realize testes no formulário.
Os passos acima informados são extremamente necessários para o completo entendimento deste tutorial.
Arquitetura
Leia os comentários de cada método dos arquivos presentes neste projeto, isso irá ajudar muito na compreensão do que foi feito.
Levando em consideração que o ".html" seja o ponto de partida para visualizarmos uma página, quero propor a seguinte abordagem aqui, que será mostrar do arquivo mais interno ao mais externo. Ou seja, vamos começar pelo serviço, passando para o componente até chegar na página ".html".
abstract-form-builder.ts
É esta classe que irá fazer toda a "magia" na criação do objeto FormGroup. Em resumo sua função é criar o FormGroup do tipo <T> do qual será passado pela classe que for sua herdeira. Seu método principal é o construirFormGroup() além de criar o FormGroup ele cria uma referência local através do método atualizarReferenciaFormulario() capturando os FormControls e passando para a variável local formControls do tipo <T>. Além disso são inicializadas as validações padrão dos FormControls criados, quando houverem.
formulario-simples-builder-service.ts
Reparem que criei uma classe chamada PessoaVM (é ela que será o tipo <T>) no mesmo arquivo, mas se preferir pode colocar dentro de um arquivo próprio. Sua função é ser um modelo para nosso formulário, lembre-se que um dos problemas apontados no artigo anterior foi justamente o fato dos atributos serem criados em tempo de execução. Agora não mais! 😃
O Serviço FormularioSimplesBuilderService é filho de AbstractFormBuilder, ou seja, seus comportamentos serão herdados e é nele que devemos aplicar todas as regras de validação do formulário. Isso o torna um serviço especializado em regras de negócio especificas do formulário que estamos desenvolvendo o que irá tornar o código mais legível e com baixo acoplamento.
A beleza de guardarmos uma referência dos FormControls dentro do objeto formControls é que não precisaremos usar o método get() do FormGroup passando uma string e correndo o risco de ter que replicar esse código diversas vezes. Dependendo da quantidade de regras de validação de um determinado campo esse get() irá sair caro pra você e é nesse ponto que está o campo minado. 🔥
Vamos usar um objeto como referência que é melhor né!? Usamos o this.formControls objeto que foi herdado de AbstractFormBuilder dai colocamos this.formControls.altura se mudar já vai aparecer como erro de compilação, entretanto, será mais difícil isso acontecer pois a maioria das IDE's são eficientes no seu Refactor > Rename e conseguem atualizar todas as referências.
formulario-simples.component.ts
Nesta classe iremos injetar o FormularioSiplesBuilderService, usar o método construirFormGroup() e armazenar numa variável local do tipo FormGroup. Além disso a classe não tem mais preocupação nenhuma em como serão feitas as validações do formulário, mas apenas em quando serão feitas.
O método modificarComportamentoFormulário() será executado quando o campo apelido for modificado então ele irá chamar o método atualizarComportamentoControlAltura(), pois esse sim sabe como manipular as validações. Olha que maravilha, o componente não precisa se preocupar em como fazer ele só delega e nosso Serviço especializado se encarrega de mostrar para o que veio. 🧐
formulario-simples.component.html
Finalmente o "html" aqui não temos nada novo, o formulário foi apresentado assim como qualquer exemplo que podemos encontrar no site do Angular.
Reitero a importância de você abrir o projeto, executar e ler seu conteúdo, para adquirir um completo entendimento acerca deste artigo. Se não o fez, volte e faça agora, eu espero. ⏳
Caso tenha gostado da solução e deseje implementá-la no seu projeto sugiro você verificar se os objetos recebidos nos métodos são nulos. É importante, mas no exemplo eu não fiz. 😅
Obrigado por chegar até aqui!🥳 Aguardem para mais artigos.

Last updated
Was this helpful?