Я выяснил, почему ваш второй валидатор не работает.На самом деле добавление валидаторов неверно.
Вы назначили массив валидаторов в качестве второго параметра метода this.fb.group()
:
this.fb.group({...}, [this.subFormValidator.bind(this), { validator: this.AvailabilityBalanceValidator('available_qty', 'quantity') }];
Метод FormBuilder.group
получает в качестве второго параметра объект с двумя возможными параметрами validator
и asyncValidator
(см. документы ).
Чтобы исправить недостающую проверку, вы должны изменить свой код следующим образом:
this.fb.group({...}, {
validator: Validators.compose([this.subFormValidator.bind(this), this.AvailabilityBalanceValidator('available_qty', 'quantity')])
};
Обновление:
subFormValidator(control: AbstractControl): { [key: string]: any } {
return control.value.checkbox_value &&
// Only adds the error if quantity is not set or it's an empty string
(!control.value.quantity || control.value.quantity.length === 0)? { 'req': 'This field is required' } : null
}
И в вашем html:
<small class="form-text text-muted danger" *ngIf="row.hasError('req')">This field is required</small>
Потому что в противном случае сообщение всегда отображается, если элемент управления имеет ошибку.