Я использую реактивные формы Angular 4.4.3 для реализации настраиваемой проверки для группы элементов управления в форме. Метод AbstractControl.setErrors, согласно документам, обновляет свойство ошибок AbstractControl при который он вызывается, обновляет статус своего родителя, но не свойство родительских ошибок. Я хотел установить свойство errors для экземпляра FormGroup, поэтому я использую setErrors, унаследованные от FormGroup. Однако он не обновляет ошибки должным образом.
Ниже приведен мой пример кода: пробуя его на экземплярах FormControl, обновляются их ошибки, а также статус достоверности их родителей (но не ошибки родителей!):
let myFormGroup
= this._formBuilder
.group({
ctrl1: [null],
ctrl2: [null]
},
{
validator: (fg: FormGroup) => {
let ctrl1 = fg.get('ctrl1'),
ctrl2 = fg.get('ctrl2'),
ctrl1Empty = !ctrl1.value,
ctrl2Empty = !ctrl2.value;
//Successfully sets ctrl1.errors and fg.status, but not fg.errors
if (ctrl1empty)
ctrl1.setErrors({ctrl1required: true});
//Successfully sets ctrl2.errors and fg.status, but not fg.errors
if (ctrl2Empty)
ctrl2.setErrors({ctrl2required: true});
//Doesn't work, doesn't update fg.errors
if (ctrl1Empty && ctrl2Empty)
fg.setErrors({required: true});
}
})
Есть идеи, почему?
return {required: true}
) работает, но все же поведениеsetErrors
несовместимо в случае экземпляровFormGroup
, которые являются экземплярамиAbstractControl
. - person Bahaa   schedule 25.09.2017