概念:
Angular中的表单valid是指表单中的输入项是否符合预设的规则和条件。在Angular中,可以通过使用表单控件的属性和方法来判断表单的valid状态,例如使用form.valid属性来判断整个表单是否valid,或者使用formControl.valid属性来判断单个表单控件是否valid。
在使用表单valid的时候,可以通过在模板中使用ngIf指令来根据valid状态来显示或隐藏相应的内容,或者在组件中使用valid状态来进
应用场景:
- 表单提交前的验证:在用户提交表单之前,可以通过表单的valid状态来进行验证,确保用户输入的内容符合要求。
- 动态显示错误提示:可以根据表单控件的valid状态来动态显示错误提示信息,帮助用户更好地理解输入的要求。
- 控制提交按钮的可用状态:可以根据整个表单的valid状态来控制提交按钮的可用状态,确保用户只有在输入符合要求的情况下才能提交表单。
示例:
import { Component } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-validation',
template: `
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<input type="text" formControlName="name">
<div *ngIf="myForm.get('name').invalid && myForm.get('name').touched">
<p *ngIf="myForm.get('name').errors.required">Name is required</p>
</div>
<button type="submit">Submit</button>
</form>
`
})
export class ValidationComponent {
myForm: FormGroup;
constructor() {
this.myForm = new FormGroup({
name: new FormControl('', Validators.required)
});
}
onSubmit() {
if (this.myForm.valid) {
// Form is valid, do something
}
}
}
使用小技巧:
- hasError方法:可以使用
hasError
方法来检查表单控件的特定错误。该方法可用于检查表单控件是否包含特定的验证错误。格式为:form.controls['表单名'].hasError('错误类型名'),比如,form.get('name').hasError('required'),在这里我们使用hasError('required')
方法来检查名为“name”的表单控件是否包含“required”验证错误。 - 多个表单验证的书写格式为:
this.inputForm = new FormGroup({ inputText: new FormControl('', [Validators.required, this.forbiddenCharactersValidator()]) });
setValidators方法:可以
动态设置表单控件的验证器。这允许我们在运行时根据特定条件更改表单控件的验证规则。updateValidation() { const nameControl = this.myForm.get('name'); if (nameControl) { nameControl.setValidators([Validators.required, Validators.minLength(3)]); nameControl.setValidators([]);//设置成无任何表单验证 nameControl.updateValueAndValidity(); } }
- 自定义表单验证示例:
<!-- 在模板中定义一个输入框 --> <input type="text" [(ngModel)]="inputText" name="inputText" [ngClass]="{ 'is-invalid': inputForm.controls.inputText.invalid }" /> <!-- 在组件中定义表单控制器,以及包含自定义校验器的验证器函数 --> import { Component } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; @Component({ selector: 'my-app', template: `<form [formGroup]="inputForm"><input type="text" [(ngModel)]="inputText" name="inputText" [ngClass]="{ 'is-invalid': inputForm.controls.inputText.invalid }" /></form>` }) export class AppComponent { inputForm: FormGroup; inputText: string; constructor() { this.inputForm = new FormGroup({ inputText: new FormControl('', [Validators.required, this.forbiddenCharactersValidator()]) }); } // 自定义表单验证器,判断输入是否包含特殊字符 // 这个验证器的名字为forbiddenCharacters, 可用hasError('forbiddenCharacters')方法来判断表单是否有这个错误 forbiddenCharactersValidator() { return (control: FormControl) => { const forbiddenCharacters = /[&%$#@!*]/; const invalid = forbiddenCharacters.test(control.value); return invalid ? { 'forbiddenCharacters': true } : null; }; } }