【发布时间】:2018-04-11 04:16:06
【问题描述】:
我正在使用Angular 5 Reactive forms,并设置了一个form group 说confirmEmail 和两个form controls 作为email 和confirmEmail。我在form group 中进一步添加了validator,form controls 附加了required 验证。
My use case is:我想根据各个表单控件的值触发custom validation,如果自定义验证器返回为invalid,则将表单控件标记为有错误。
My issue is that:一旦form controls 被标记为错误,自定义验证器(在表单组上)不会触发,直到我再次触摸两个表单控件并更改它们的值。
理想情况下,我只想更新其中一个字段(以匹配另一个字段)并能够再次触发自定义验证。
示例代码:
@Component({...})
export class FormComponent implements OnInit {
user: FormGroup;
constructor(private fb: FormBuilder) {}
ngOnInit() {
this.user = this.fb.group({
data: this.fb.group({
email: ['', Validators.required],
confirmEmail: ['', Validators.required]
}, , { validator: validateEmail })
});
}
const validateEmail = (control: AbstractControl): {[key: string]: boolean} => {
const email = control.get('email');
const confirmEmail = control.get('confirmEmail');
if (email.value === confirmEmail.value) {
return null;
} else {
this.setFieldAsInvalid(email);
this.setFieldAsInvalid(confirmEmail);
return { nomatch: true };
}
};
private setFieldAsInvalid(field: AbstractControl) {
field.setErrors({
'invalid': true
});
}
}
任何解决此问题的建议或我应该采取的任何其他方法。
【问题讨论】:
-
能否也附上html代码