Angular提供了强大的表单验证机制,主要通过以下两种方式实现:
当单击提交按钮时不显示错误消息,通常有以下几种原因:
ngModel
或formControlName
<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm)">
<div class="form-group">
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
[(ngModel)]="user.email"
#email="ngModel"
required
email
>
<div *ngIf="email.invalid && (email.dirty || email.touched || myForm.submitted)" class="error-message">
<div *ngIf="email.errors?.['required']">Email is required</div>
<div *ngIf="email.errors?.['email']">Invalid email format</div>
</div>
</div>
<button type="submit">Submit</button>
</form>
import { Component } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';
@Component({
selector: 'app-my-form',
templateUrl: './my-form.component.html'
})
export class MyFormComponent {
myForm = this.fb.group({
email: ['', [Validators.required, Validators.email]]
});
constructor(private fb: FormBuilder) {}
onSubmit() {
if (this.myForm.invalid) {
// 标记所有字段为 touched 以显示错误
this.myForm.markAllAsTouched();
return;
}
// 处理表单提交
}
}
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<div class="form-group">
<label for="email">Email</label>
<input
type="email"
id="email"
formControlName="email"
>
<div *ngIf="myForm.get('email')?.invalid && (myForm.get('email')?.touched || myForm.get('email')?.dirty || myForm.submitted)" class="error-message">
<div *ngIf="myForm.get('email')?.errors?.['required']">Email is required</div>
<div *ngIf="myForm.get('email')?.errors?.['email']">Invalid email format</div>
</div>
</div>
<button type="submit">Submit</button>
</form>
touched
)dirty
)submitted
)FormsModule
或ReactiveFormsModule
通过以上方法,应该能解决提交时不显示错误消息的问题。
没有搜到相关的文章