Обновлять: Раньше в вопросе не было четкого объяснения, что объект FormGroup
является частью FormArray
.
Я слушаю изменения значения объекта FormGroup
, который является частью FormArray
, однако переданное значение кажется просто значением, которое не ссылается на исходный объект FormGroup
.
formArrayObject.controls.forEach(formGroupObject => {
formGroupObject
.valueChanges
.pipe(takeUntil(this.someUnsubscriber$))
.subscribe(updatedFormGroupObject => {
// this doesn't update formGroupObject
updatedFormGroupObject.anotherProperty = true;
});
}
Как обновить другие свойства обновленного formGroupObject
внутри обратного вызова подписки?
Проблема в том, что вы не знаете, какой formGroupObject
был обновлен, поэтому не знаете, какой formGroupObject
обновить.
Я бы хотел, чтобы updatedFormGroupObject
вернул ссылку на обновленный объект, но этого не произошло.
AbstractControl
не будет обновляться после изменения свойств, исходящих от valueChanges
.
Вам нужно будет обновить значение формы самостоятельно:
formGroupObject.patchValue({
anotherProperty: true,
});
... или, может быть, вы хотите использовать setValue()
, но в этом случае это должно быть то же самое:
formGroupObject.setValue({
...updatedFormGroupObject,
anotherProperty: true,
});
Это почти то же самое, вы можете получить индекс того, что formGroupObject
излучается из forEach((formGroupObject, index) => ...)
, а затем вызывать formArrayObject.at(index).patchValue(...)
Спасибо @martin! это работает, но я понял, что неправильно объяснил проблему. formGroupObject является частью
FormArray
, поэтому часть проблемы заключается в том, чтобы узнать, какой элемент массива был обновлен. я обновлю вопрос