Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Formulário reativo – questão confusa

Esta questão sobre formulários reativos está bem confusa. Primeiro achei que a alternativa incorreta era a B, que falava sobre ReactiveFormsModule por faltar o "s" na palavra Forms (seria um motivo bobo para estar errada, mas achei que fosse isso).

A alternativa que na verdade era incorreta diz:

C) O modelo de dados do formulário reativo é criado com base no template HTML utilizando a propriedade formControlName.

Alternativa incorreta! Ao utilizar formulários reativos, Cecília deve montar o modelo de dados no componente utilizando o serviço formBuilder e realizar a ligação com o Template utilizando a diretiva formControlName.

Qual é a a diferença entre “com base no template HTML utilizando a propriedade formControlName” e “ligação com o Template utilizando a diretiva formControlName”? Parece a mesma coisa.

Talvez o problema seja a diferença entre propriedade e diretiva, mas não lembro de ter sido explicado o que é uma diretiva no contexto do Angular. Para mim, algo que aparece como formControlName="..." pode ser chamado de atributo ou propriedade, não conhecia o termo diretiva.

Ou talvez o problema seja o “com base no template HTML”, já que os forms reativos são mais baseados no código em TypeScript. Acho que até que é este o motivo da alternativa estar incorreta, mas até o momento os templates dos dois tipos de forms ensinados são muitíssimo parecidos e não parece errado dizer “com base no template”.

De qualquer forma, fica a sugestão de deixar mais claro onde está o erro.

2 respostas
solução!

Boa tarde Marcus,

Não faço parte da equipe de suporte da Alura...mas avaliando a alternativa incorreta ( C ): "O modelo de dados do formulário reativo é criado com base no template HTML utilizando a propriedade formControlName".

1) O trecho que torna a frase como incorreta é a definição de que o modelo de dados do formulário reativo é criado com base no template, até porque é justamente ao contrário disso, pois o modelo de dados do formulário reativo é fortemente focado no componente (classe - arquivo .ts) e podendo-se utilizar o formBuilder também no componente. Na documentação oficial do angular há uma comparação entre os dois tipos de formulários existentes (reativo Vs orientado a modelos) https://angular.io/guide/forms-overview

Angular - forms - diferencas

2) Seguindo o seu raciocínio acima e verificando a definição de formControlName na documentação do angular, o mesmo é classificado como Diretiva: https://angular.io/api/forms/FormControlName

Conclusão Na minha visão o item 1 acima é o que mais torna a frase como incorreta

Ah, verdade, deve ser a diferença entre “criar o modelo de dados com base no template” e “criar/montar o modelo de dados no código do componente e realizar a ligação com formControlName”. Como o curso é bastante prático, eu não tinha a noção do que era o tal modelo de dados e modelo de formulário e em qual ponto do código eles eram criados.

Olhei a documentação sugerida e, segundo ela, o [(ngModel)]="" é que faz toda a diferença e torna o form template based, criando FormControls para nós (chamado de “modelo de formulário”). À primeira vista [(ngModel)]= e formControlName pareciam formas diferentes de fazer a mesma coisa (associar um input a uma variável), mas agora vi que são bem diferentes, um cria e o outro referencia. Até o tratamento de mutabilidade e eventos é completamente diferente. Tem muita coisa para estudar sobre isso, pelo jeito!

Obrigado pela ajuda!