требуемый валидатор еще активен после использования clearValidators () - PullRequest
0 голосов
/ 01 февраля 2019

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

<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 выглядит следующим образом

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 [charge + name] .clearAsyncValidators ();

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

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

...