Новый ввод не изменяет свойство отключения FormGroup для субкомпонента

#javascript #angular #typescript #angular-reactive-forms #angular-forms

Вопрос:

У меня есть два компонента-родительский и Дочерний.

Родитель сохраняет состояние группы форм, используемой в дочернем компоненте. Каждый раз, когда я получаю новые данные из внешнего источника, я передаю эти данные через шаблон и создаю новую группу форм и на основе одного свойства решаю, включена или отключена группа форм. Новые данные изменяются так, как я хочу, но состояние отключено/включено-нет.

Мой код:

Дочерний компонент

 @Input() edvForm: FormGroup;
@Input() isBlocMainSupport: boolean;
@Input() data: Data;

ngOnChanges(changes: SimpleChanges): void {
   this.setForm();
}

setForm() {
   ...
   this.edvForm.addControl(
      'supportType',
      new FormControl({ value: supportType, disabled: !this.isBlocMainSupport })
   );
}
 

Родительский компонент

 edvForm: FormGroup;
isBlocMainSupport = true;
data: Data;

...

ngOnInit(): void {
   this.sourceEvent$
      .pipe(takeUntil(this.destroy$))
      .subscribe(newData => {
        this.newGraphicElements([newData]);
      });
}

...

newGraphicElements(newData: Data[]) {

   this.reset();
   ...
   this.data = newData[0];
   this.isBlocMainSupport = myCondition ? true : false;
}

...

reset() {
   this.edvForm = new FormGroup({});
}
 

Родительский шаблон

 <child-comp
   *ngIf="isTheRightChild"
   [data]="data"
   [edvForm]="edvForm"
   [isBlocMainSupport]="isBlocMainSupport"
></child-comp>
 

Чтобы возобновить, данные хорошо передаются и меняются каждый раз по мере необходимости.
Но состояние отключения не применяется с : «отключено: !this.isBlocMainSupport»

Ответ №1:

Я нашел решение на github: FormGroup disable()/enable() не работает сразу после инициализации #22556

Проблема в детекторе изменений. Следующий код работает :

 this.changeDetector.detectChanges(); // use it before using disable/enable
this.form.controls['name'].disable();