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.

Demonstração do projeto

Inicializando a aplicação

Arquitetura

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.

Obrigado por chegar até aqui!🥳 Aguardem para mais artigos.

O Autor

Last updated

Was this helpful?