3
respostas

Lógica por trás do formulário de EDITAR

Olá,

Percebi que na transformação do formulário de EDITAR PENSAMENTO para ser reativo, foi inserido a diretiva ngIf, conforme abaixo. Quebrei a cabeça ao fazer sozinho e tentar corrigir o comportamento que estava tendo antes de inserir essa diretiva - os campos de autoria e modelo eram preenchidos ao montar a tela, mas o de conteúdo não. Assim que coloquei o ngIf, funcionou, mas confesso que não entendi o motivo dessa cláusula fazer efeito desta forma, já que ela controla o elemento de formulário apenas e não os dados em si. Poderiam explicar?

<form [formGroup]="formulario" *ngIf="formulario">

3 respostas

Oi, Alan, tudo bem?

O Angular processa o template antes de os dados estarem disponíveis. Portanto, sem o ngIf, o Angular tentaria acessar o formulário antes de ele ser inicializado, o que causaria um erro.

Ao adicionar ngIf="formulario", você está dizendo ao Angular para renderizar o formulário apenas quando o objeto "formulario" estiver disponível. Isso evita o erro que mencionei, pois o Angular agora espera até que o formulário seja inicializado antes de tentar renderizá-lo.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Blz, Rodrigo. Obrigado. Mas ainda resta a dúvida sobre o fato dele ter renderizado corretamente a autoria e o modelo e apenas não o conteúdo. Entendendo que os 3 dados compõem um mesmo objeto e este objeto estaria carregado após o template, não seria para nenhum carregar? Consegue entender minha dúvida ainda? Venho do Vue e lá geralmente colocamos uma condições no "onMounted" para quando montar a tela verificar se o estado está inicializado. Compreendi que são coisas parecidas, mas ainda resta a dúvida do porquê parte do objeto renderiza e outra parte não.

Oi, Alan, tudo bem?

Desculpe a demora em te responder!

Quando renderizamos componentes e dados no Angular, estamos diretamente ligados ao ciclo de vida do componente. Quando o componente é inicializado, os dados podem ainda não estar disponíveis, o que pode resultar em parte do objeto sendo renderizado e outra parte não.

Uma boa prática é utilizar condições no template para verificar se os dados estão disponíveis antes de tentar renderizá-los. No caso do botão de salvar, por exemplo, é importante desabilitá-lo caso o formulário esteja inválido, o que pode ser feito utilizando property binding e uma classe CSS dinâmica, como foi abordado na aula.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!