Вот моя ситуация. У меня есть форма, которая охватывает несколько вкладок и содержит два значения, numberOfUsers
, которое является числом, и users
, которое является массивом пользовательских данных (идентификатор, имя, адрес, город).
Каждое tab создается динамически и имеет повторяющуюся группу form с именем 'user', которая является частью formArray. Каждая вкладка может содержать не более 3 групп пользователей.
Я хотел бы обновить массив основной формы users
, указав значения всех созданных групп пользователей. Прямо сейчас у меня есть разные формы на каждой вкладке, содержащие разные пользовательские данные. Я использую динамический c BehaviorSubject в сервисе для сбора и передачи данных из вторичных форм. Вот сервис:
export class BroadcasterService {
// subject
protected _eventsSubject = new BehaviorSubject<any>({});
constructor() {
}
broadcast(key: any, value: any) {
this._eventsSubject.next({ key, value }); // here we are setting the key and value of our subject
}
on<T>(key: any): Observable<T> {
return this._eventsSubject.asObservable()
.pipe(
filter(e => e.key === key),
map(e => e.value)
);
}
Каждая форма устанавливает свой key
и передает value
в behaviorSubject
следующим образом:
onChanges(): void {
this.usersArray.valueChanges
.subscribe(val => {
this.broadcaster.broadcast('BIS_' + this.tabNumber, val);
});
}
Затем в моем основном компоненте, Я подписываюсь на все наблюдаемые и предполагаю, что мне нужно объединить или объединить их или сделать что-то еще, чтобы получить одну наблюдаемую, которая обновляет users
formArray в моей основной форме. Вот что я делаю:
let main: Observable<[]> = this.broadcaster.on("Main");
let bis1: Observable<[]> = this.broadcaster.on("BIS_1");
let bis2: Observable<[]> = this.broadcaster.on("BIS_2");
Observable.concat(main, bis1, bis2).subscribe(values => {
values.forEach(value => {
this.addUser();
});
this.usersArray.patchValue( values );
});
Видимо, я делаю что-то очень неправильно. Я новичок в RX js. Я даже не знаю, является ли этот подход правильным ... Я получаю несколько подписок с нулевыми значениями и, в зависимости от порядка наблюдаемых в объединенной наблюдаемой, я получаю разные результаты. Может ли кто-нибудь помочь мне в этом ...?
Вот блиц, для лучшего понимания.
https://stackblitz.com/edit/bis-tabs