Diretiva ngForm - Angular
Geralmente, ao trabalhar com formulários, todos os elementos de entrada não são definidos isoladamente, mas são colocados dentro de um elemento de formulário padrão: <form></form>
No Angular, a diretiva especial NgForm
FormGroup
Podemos aplicar essa diretiva definindo uma variável na tag do formulário:
<form #myForm="ngForm">
Embora ao usar formulários não seja obrigatório utilizar essas variáveis que representam o formulário como um todo, ao utilizá-las, podemos obter algumas funcionalidades adicionais. Em particular, podemos acessar o status do formulário através dessa variável.
Por exemplo, veja o seguinte componente AppComponent
import { Component } from "@angular/core";
import { FormsModule, NgForm } from "@angular/forms";
class User {
constructor(
public name: string,
public email: string,
public phone: string
) {}
}
@Component({
selector: "my-app",
standalone: true,
imports: [FormsModule],
styles: `
input.ng-touched.ng-invalid {border: solid red 2px;}
input.ng-touched.ng-valid {border: solid green 2px;}
`,
template: `<form #myForm="ngForm" novalidate>
<p>
<label>Nome</label><br>
<input name="name" [(ngModel)]="name" required />
</p>
<p>
<label>Email</label><br>
<input name="email" ngModel required email />
</p>
<p>
<label>Telefone</label><br>
<input name="phone" ngModel required pattern="[0-9]{10}" />
</p>
<button [disabled]="myForm.invalid" (click)="submit(myForm)">Adicionar</button>
</form>
<p>Nome: {{myForm.value.name}}</p>
<p>Email: {{myForm.value.email}}</p>`
})
export class AppComponent {
name: string = "";
email: string = "";
phone: string = "";
submit(form: NgForm) {
console.log(form);
}
}
Para utilizar a diretiva NgForm
"angular/forms"
import { NgForm } from "@angular/forms";
No formulário, foi definida a variável #myForm
"ngForm"
myForm
NgForm
Mesmo que não tenhamos explicitamente adicionado a diretiva NgForm
form
ngModel
<form class="ng-pristine ng-untouched ng-valid" novalidate="">
As classes ng-pristine
ng-untouched
ng-valid
A seguir, podemos utilizar o formulário, principalmente para sua validação. Primeiramente, o formulário utiliza o atributo "novalidate"
Em segundo lugar, utilizando o estado do formulário, podemos desabilitar o botão, evitando certas ações quando ele for pressionado:
<button [disabled]="myForm.invalid">
No método submit()
onSubmit(myForm: NgForm) {
console.log(myForm);
}
Os elementos do formulário utilizam a diretiva ngModel
ngModel
ngModel
Ao trabalhar com a variável myForm

Por exemplo, através da propriedade controls
ngModel
name
Para obter os valores inseridos, também podemos utilizar a propriedade value
<p>Nome: {{myForm.value.name}}</p>
<p>Email: {{myForm.value.email}}</p>
É importante destacar que o acesso ao elemento correspondente só será possível se a diretiva ngModel
Envio de Formulário
Após preencher o formulário, o usuário geralmente o envia clicando em um botão de envio (<input type="submit" />
ngSubmit
import { Component } from "@angular/core";
import { FormsModule, NgForm } from "@angular/forms";
class User {
constructor(
public name: string,
public email: string,
public phone: string
) {}
}
@Component({
selector: "my-app",
standalone: true,
imports: [FormsModule],
styles: `
input.ng-touched.ng-invalid {border: solid red 2px;}
input.ng-touched.ng-valid {border: solid green 2px;}
`,
template: `<form #myForm="ngForm" novalidate (ngSubmit)="onSubmit(myForm)">
<p>
<label>Nome</label><br>
<input name="name" ngModel required />
</p>
<p>
<label>Email</label><br>
<input name="email" ngModel required email />
</p>
<p>
<label>Telefone</label><br>
<input name="phone" ngModel required pattern="[0-9]{10}" />
</p>
<input type="submit" [disabled]="myForm.invalid" value="Enviar" />
</form>`
})
export class AppComponent {
name: string = "";
email: string = "";
phone: string = "";
onSubmit(form: NgForm) {
console.log(form);
}
}
Nesse caso, ao gerar o evento ngSubmit
onSubmit()