🚀 Capítulo 10: Formulários Orientados a Template
🎯 Objetivo da Aula
Ao final desta aula, você será capaz de criar formulários de entrada de dados no Angular usando a abordagem Template-Driven, capturar os dados preenchidos pelo usuário e realizar validações básicas.
🏢 O Cenário Prático (Seu Desafio)
A Aliança Rebelde precisa cadastrar novos pilotos para a frota. Seu desafio hoje é criar o formulário de Alistamento de Pilotos, onde o usuário digitará o nome e a patente do recruta, garantindo que nenhum campo fique vazio!
🧠 Fundamentos: A Teoria Traduzida
O Angular oferece duas formas de trabalhar com formulários. A primeira é a Template-Driven (Orientada a Template), onde a maior parte da lógica fica direto no arquivo HTML.
Conceitos Chave:
ngForm: É a diretiva que transforma uma tag<form>comum em um formulário inteligente do Angular.ngModel: Como vimos, ele sincroniza o valor do input com o código. Em formulários, ele também serve para registrar o campo dentro do formulário.#meuForm="ngForm": Cria uma variável de referência no HTML para podermos checar se o formulário está válido ou não.
📖 Exemplo Guiado: Formulário de Alistamento
Vamos criar o formulário no nosso componente.
🛠️ Passo a Passo (HTML)
Abra src/app/painel-controle/painel-controle.component.html e adicione:
<div class="painel">
<h3>📝 Alistamento de Pilotos</h3>
<!-- Criamos a referência #f e dizemos para executar cadastrar() ao enviar -->
<form #f="ngForm" (ngSubmit)="cadastrar(f)">
<div>
<label>Nome do Recruta:</label>
<input type="text" name="nome" ngModel required #nome="ngModel">
<!-- Mostra erro se o campo foi tocado e está inválido -->
<span *ngIf="nome.invalid && nome.touched" style="color: red;">
O nome é obrigatório!
</span>
</div>
<div>
<label>Patente:</label>
<input type="text" name="patente" ngModel required>
</div>
<button type="submit" [disabled]="f.invalid">Cadastrar</button>
</form>
</div>🛠️ Passo a Passo (TypeScript)
Abra src/app/painel-controle/painel-controle.component.ts e adicione a função:
cadastrar(form: any) {
if (form.valid) {
console.log('Dados do Recruta:', form.value);
alert('Recruta cadastrado com sucesso!');
form.reset(); // Limpa o formulário
}
}🕹️ Como Executar e Testar no VS Code
- Salve tudo e veja o navegador.
- Tente clicar no botão “Cadastrar” sem preencher nada. Ele estará desabilitado!
- Digite algo no campo Nome, apague e clique fora. A mensagem vermelha “O nome é obrigatório!” aparecerá.
- Preencha os dois campos e clique em Cadastrar. O alerta aparecerá e os dados serão impressos no console do navegador!
🛠️ Prática Obrigatória 1
Adicione um terceiro campo no formulário chamado “Idade” (name="idade"). Torne-o obrigatório e do tipo número.
🛠️ Prática Obrigatória 2
Use a interpolação para exibir na tela o estado do formulário (f.valid). O resultado deve ser true ou false na tela enquanto você digita.
🔑 Gabarito de Código/Fórmulas
Prática 1:
No .html (dentro do form):
<div>
<label>Idade:</label>
<input type="number" name="idade" ngModel required>
</div>Prática 2:
No .html (fora do form):
<p>O formulário está válido? {{ f.valid }}</p>