Я реализую перекрестную проверку поля для двух полей в форме (реактивный/модель на основе подхода) и не знаю, как я должен добавить ошибку в существующий список погрешности FormControlУгловая 2 Проверка перекрестного поля (на основе модели) addErrors?
Форма:
this.myForm = new FormGroup({
name: new FormControl('', Validators.minLength(3));
city: new FormGroup({
cityOne: new FormControl('', Validators.minLength(3)),
cityTwo: new FormControl('', Validators.minLength(3))
}, this.validateEqualCities)
});
Validator:
validateEqualCities(formGroup: FormGroup) {
return (control: AbstractControl): { [key: string]: any } => {
if (formGroup.controls['cityOne'].value && formGroup.controls['cityTwo'].value && formGroup.controls['cityOne'].value !== formGroup.controls['cityTwo'].value) {
formGroup.controls['cityOne'].setErrors({ 'equalCities': true }, { emitEvent: true });
formGroup.controls['cityTwo'].setErrors({ 'equalCities': true }, { emitEvent: true });
return { 'equalCities': false };
} else {
formGroup.controls['cityOne'].updateValueAndValidity({ onlySelf: true, emitEvent: false });
formGroup.controls['cityTwo'].updateValueAndValidity({ onlySelf: true, emitEvent: false });
}
return null;
};
}
Моей проблема: Если проверка не пройдена «setErrors (..)» отменяет все ошибки, которые уже есть (валидаторы из formControls), так что нет никакого правильного состояния, потому что на самом деле должно быть 2 ошибки.
Если я не устанавливаю ошибки для непосредственного формирования элементов управления и возвращает ошибку в форму, только форма является недопустимой и получает ошибку, но не ее элементы управления.
Как я могу достичь того, что и форма, и элементы управления имеют реальное состояние проверки?
спасибо!
Он выглядит хорошо, я думал о решении и спросил себя, это выглядит как какое-то хак, нет никакого другого более элегантного/родное решения? Но, тем не менее, спасибо! – user3287019
Не совсем, нет никаких средств, чтобы добавить одну ошибку, если вы делаете явный набор (и нет возможности сделать классовые ошибки каскадом, о которых я знаю), так что это в значительной степени то, что вы получаете. – silentsod