требуемый валидатор все еще активен после использования clearValidators()

У меня есть список строк, каждая из которых имеет несколько вариантов выбора, входных данных и флажок, который выглядит так

<mat-checkbox [(ngModel)]="chargeApply[charge]" [ngModelOptions]="{standalone: true}"
            (change)="setChargeValidators(charge, $event.checked)"></mat-checkbox> 

Целью setChargeValidators является добавление/удаление валидаторов для строки, которая была выбрана/не выбрана, это функция (есть много дополнительных вещей, которые работают нормально, но я не объясняю о функции, важная часть - очистка валидаторов когда выбрано значение false, а CELL_VALIDATION — это массив, содержащий Validators.required):

setChargeValidators(charge: string, selected: boolean) {
if (selected) {
  this.chargesSelected = true;
  this.chargesForm.controls[charge + '20'].setValidators(CELL_VALIDATION);
  this.chargesForm.controls[charge + '40'].setValidators(CELL_VALIDATION);
  this.chargesForm.controls[charge + '40hc'].setValidators(CELL_VALIDATION);
  this.chargesForm.controls[charge + 'Currency'].setValidators(Validators.required);
  this.chargesForm.controls[charge + 'Unit'].setValidators(Validators.required);
} else {
  const controlNames = ['20', '40', '40hc', 'Currency', 'Unit'];
  for (let name of controlNames) {
    if (name !== 'Currency' ) {
      this.chargesForm.controls[charge + name].reset();
    }
    this.chargesForm.controls[charge + name].clearValidators();
  }

  for (let chargeName in this.chargeApply) {
    if (this.chargeApply[chargeName]) {
      return;
    }
  }
  this.chargesSelected = false;
}

this.updateForm(charge);}

Форма обновления выглядит так

updateForm(charge) {
const controlNames = ['20', '40', '40hc', 'Currency', 'Unit'];
for (let name of controlNames) {
  this.chargesForm.controls[charge + name].updateValueAndValidity();
  // debugger
}

}

Однако, когда я отменяю выбор строки, все FormControls этой строки имеют

ошибка: {обязательно: правда}

Вроде очищаются все валидаторы, кроме Validators.required. я пытался сделать

this.chargesForm.controls[заряд + имя].clearAsyncValidators();

В дополнение к clearValidators() без эффекта (что имеет смысл, поскольку я не устанавливаю асинхронную проверку). Я также пробовал Это решение не помогло.

Спасибо за ваше время.


person Ricardo Vethencourt    schedule 01.02.2019    source источник
comment
Побочный комментарий: я бы не рекомендовал вам использовать ngModel и реактивные формы вместе! angular.io/api/forms/FormControlName#use-with-ngmodel   -  person wentjun    schedule 01.02.2019
comment
Вы правильно указали на это, но на данный момент эта привязка работает так, как предполагалось.   -  person Ricardo Vethencourt    schedule 01.02.2019