У меня есть класс с обнуляемыми свойствами и обновляем их, используя реактивные формы. Однако в некоторых случаях 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 );
});