Art*_*ter 0 formbuilder angular angular-reactive-forms
我有这样的 mat-input 错误处理
<mat-form-field>
<input formControlName="title" matInput placeholder="Title*" />
<mat-error *ngIf="addNewForm.get('title').errors?.required">
Can not be empty
</mat-error>
<mat-error *ngIf="addNewForm.get('title').errors?.minlength">
Min length is 1 character
</mat-error>
<mat-error *ngIf="addNewForm.get('title').errors?.maxlength">
Max length is 255 characters
</mat-error>
</mat-form-field>
<mat-form-field>
<input formControlName="name" matInput placeholder="Name*" />
<mat-error *ngIf="addNewForm.get('name').errors?.required">
Can not be empty
</mat-error>
<mat-error *ngIf="addNewForm.get('name').errors?.minlength">
Min length is 1 character
</mat-error>
<mat-error *ngIf="addNewForm.get('name').errors?.maxlength">
Max length is 255 characters
</mat-error>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
如何直接在组件中处理这个问题,而不是手动编写所有这些错误,检查组件中的所有内容并动态设置错误,如下所示
<mat-form-field>
<input formControlName="title" matInput placeholder="Title*" />
<mat-error>{{ someError }}</mat-error>
</mat-form-field>
<mat-form-field>
<input formControlName="name" matInput placeholder="Name*" />
<mat-error>{{ someError }}</mat-error>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
这是组件
this.addNewUserForm = this.formBuilder.group({
title: [
"",
[
Validators.required,
Validators.minLength(1),
Validators.maxLength(255),
noWhitespaceValidator
]
],
name: [
"",
[
Validators.required,
Validators.minLength(4),
Validators.maxLength(255),
noWhitespaceValidator
]
]
});
Run Code Online (Sandbox Code Playgroud)
您可以编写一个 getter 函数,它仅返回错误消息。像这样:
get errorMessage(): string {
const form: FormControl = (this.addNewUserForm.get('title') as FormControl);
return form.hasError('required') ?
'Required error message' :
form.hasError('maxlength') ?
'Max length error' :
form.hasError('minlength') ?
'Min length error' :
form.hasError('nowhitespaceerror') ?
'No white space error' : '';
}
Run Code Online (Sandbox Code Playgroud)
之后,您只需像模板中的变量一样使用此方法:
<mat-error>{{ errorMessage }}</mat-error>
Run Code Online (Sandbox Code Playgroud)
或者基于此示例的简单解决方案:此处。
get errorMessage(): string {
const form: FormControl = (this.addNewUserForm.get('title') as FormControl);
return form.hasError('required') ?
'Required error message' :
form.hasError('maxlength') ?
'Max length error' :
form.hasError('minlength') ?
'Min length error' :
form.hasError('nowhitespaceerror') ?
'No white space error' : '';
}
Run Code Online (Sandbox Code Playgroud)
<mat-error>{{ errorMessage }}</mat-error>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10131 次 |
| 最近记录: |