Eli*_*alá 6 angular-material angular angular-reactive-forms angular-forms
我正在处理此表单并希望在输入时进行验证。当前的行为是我选择输入,键入,当我单击其他站点时,它会显示错误。我认为当我设置控制、有效和脏时发生的错误,但我无法弄清楚。
打字稿
buildForm(): void {
this.userForm = this.fb.group({
'email': ['', [
Validators.required,
Validators.pattern('[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$')
]
],
'password': ['', [
Validators.required,
Validators.minLength(6),
Validators.maxLength(25)
]
],
});
this.userForm.valueChanges.subscribe(data => this.onValueChanged(data));
}
onValueChanged(data?: any) {
if (!this.userForm) { return; }
const form = this.userForm;
for (const field in this.formErrors) {
// clear previous error message (if any)
this.formErrors[field] = '';
const control = form.get(field);
if (control && control.invalid && control.dirty) {
const messages = this.validationMessages[field];
for (const key in control.errors) {
this.formErrors[field] += messages[key] + ' ';
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
函数 onValueChanged() 改变这个对象
formErrors = {
'email': '',
'password': ''
};
Run Code Online (Sandbox Code Playgroud)
这个对象有验证消息。
validationMessages = {
'email': {
'required': 'Email is required',
'pattern': 'Email is invalid'
},
'password': {
'required': 'Password is required',
'minlength': 'Debe tener 6 caracteres como mínimo',
'maxlength': 'Password cannot be more than 40 characters long.',
}
};
Run Code Online (Sandbox Code Playgroud)
HTML
<mat-form-field class="example-full-width">
<input matInput placeholder="Email" formControlName="email" required>
<mat-error *ngIf="formErrors.email" align="start" class="form__error">
{{ formErrors.email }}
</mat-error>
</mat-form-field>
<mat-form-field class="example-full-width">
<input matInput placeholder="Password" type="password" formControlName="password" required>
<mat-error *ngIf="formErrors.password" align="start" class="form__error">
{{ formErrors.password }}
</mat-error>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
迟到的答案,但我会把它贴在那里,以防它可以帮助任何人。
使用 Angular 6+,您可以通过onChange
FormControl 选项属性调整表单验证行为,例如:
'email': ['', {
validators: [
Validators.required,
Validators.pattern('[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$')
],
updateOn: 'change'
}]
Run Code Online (Sandbox Code Playgroud)
updateOn
可:
change
- 在更改时立即验证
blur
- 从现场导航出来时进行验证
submit
- 验证表单提交
来源:
https : //angular.io/api/forms/AbstractControlOptions
https://angular.io/guide/form-validation#note-on-performance
(我刚刚在这里回答了类似的问题:从 angular 输入中聚焦时触发验证?)
默认情况下,当触摸控件或提交表单且控件无效时,将出现表单字段错误。要更改该行为,您可以使用自定义 ErrorStateMatcher - 请参阅带有自定义 ErrorStateMatcher 的Angular Material 示例输入。
归档时间: |
|
查看次数: |
6391 次 |
最近记录: |