У меня есть проблема, которая решена и работает, но сейчас она слишком сложна, поэтому я ищу более простое решение.
В основном у меня есть реактивная форма с несколькими выпадающими списками, которые зависят друг от друга.
Пример:
myFormGroup = formBuilder.group({
Dropdown1: [''],
Dropdown2: [''], // selection values depend on Dropdown 1
Dropdown3: [''], // selection values depend on Dropdown 2
});
После создания formGroup я загружаю возможные значения для Dropdown1 из Сервиса и одновременно подписываюсь на valueChanges Dropdown1.
Пример:
loadDropdown1() {
this.myService.getDropdown1Values().subscribe(
values => {
.. // save to local var
this.subscribeDropdown1Change();
}
);
}
subscribeDropdown1Change() {
this.myFormGroup.controls.Dropdown1.valueChanges
.pipe(
// see: https://github.com/angular/angular/issues/15282
startWith(this.myFormGroup.controls.Dropdown1.value)
)
.subscribe(
selectedValue => this.loadDropdown2(selectedValue)
)
}
... and so on
Это дает мне правильные значения во втором выпадающем меню, как только первый изменится.Чтобы инициализировать форму с существующими значениями, я использую что-то вроде myFormGroup.patchValue(formData);
.Это не вызывает valueChange, поэтому мне пришлось добавить startWith()
.
. Например, теперь, если первый выпадающий список изменяется, вам нужно сбросить значения в зависимости от выпадающего списка, это также требует дополнительной логики, потому что этоне следует сбрасывать в исходное значение valueChange.
Если эти выпадающие списки находятся внутри FormArray или если форма становится более сложной, она быстро выходит из-под контроля.
Так чтоЯ хотел бы знать, если есть более простой способ справиться с этим.Инициализация formGroup с зависимыми значениями в порядке.Но загрузка дополнительных данных, в которых нуждаются различные компоненты формы, является огромной проблемой для этого решения.
Вся информация, которую я смог найти, в основном останавливается при создании формы с зависимыми значениями, но не объясняет, каквы бы обновили существующие данные.Кто-нибудь знает источник?