Angular FormGroup с нулевым свойством - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть класс с обнуляемыми свойствами и обновляем их, используя реактивные формы. Однако в некоторых случаях TestClass будет settingA, а в некоторых случаях TestClass будет settingB. Поэтому при переназначении значений с использованием this.form.valueChanges исходный экземпляр объекта будет иметь и settingA и settingB.

Например: оригинал:

{ id: 123, name: "Object1", settingA: { propertyA: "1" } }

После слияния

{ id: 123, name: "Object1", settingA: { propertyA: "1" }, settingB: { propertyB: "" } }

Намеренный результат: Если свойство B начального объекта равно нулю, после valueChanges и merge свойствоB по-прежнему равно нулю

class TestClass {
   id: number;
   name: string;
   settingA?: SettingA;
   settingB?: SettingB;
}

Компонент

this.form = this._formBuilder.group({
   name: ['', [Validators.required]],
   settingA: this._formBuilder.group({
     propertyA: [''],
   }),
   settingB: this._formBuilder.group({
     propertyB: [''],
   })
});

this.form.patchValue(this.testClass, { emitEvent: false });

this.form.valueChanges
  .pipe(
    distinctUntilChanged(),
    takeUntil(this._unsubscribe),
  ).subscribe(values => {
    merge(this.testClass, values );
  });

...