У нас есть страница, на которой есть несколько разделов. В каждом разделе может быть карточка или стол. Наблюдаемый связывает данные в html с помощью async pipe. Теперь мне нужно обновить одну из таблиц, не обновляя все наблюдаемое.
loadPageData(Id): void {
this.sections$ = this.psService.getLoadPageData(Id).pipe(
switchMap(sections => forkJoin(
sections.map(section => this.psService.getSectionData(section.sectionID).pipe(
map(card => Object.assign({}, section, { card })),
switchMap(c => c.card.map(card => iif(() => card.cardTypeId === 3,
from(this.psService.getTable(this.tablePerodID).pipe(map(table => Object.assign({}, c, { table })))),
of(c))))
).concatAll()
))
));
}
updateTable(sectionId, tablePerodID) {
let tableData;
this.psService.getTable(tablePerodID).subscribe((data) => {
tableData = data;
});
this.sections$.forEach(sections => {
sections.forEach(section => {
if (section.sectionID === sectionId) {
section.table = sectionData;
}
});
});
}
а HTML выглядит так:
<div *ngFor="let section of sections$ | async;">
<div *ngFor="let card of section.card | sort:'displayOrder';">
<app-card></app-card>
<div *ngIf="card.cardTypeName === 'Table'">
<app-table></app-table>
</div>
</div>
</div>
Теперь проблема в том, что когда я пытаюсь загрузить данные для таблицы с помощью updateTable [когда пользователь изменяет tablePerodID], он ничего не делает. Я пробовал .next()
, но он обновляет полностью section$
. В любом случае я могу только обновить таблицу?
tablePeriodID
? Значит, всякий раз, когдаtablePeriodID
обновляется, все таблицы обновляются одинаково? - person Kurt Hamilton   schedule 13.03.2020updateTable
блок forEachthis.sections$.forEach
должен находиться в блокеsubscribe
this.psService.getTable
, потому что этот вызов является асинхронным. Хотя это может не решить вашу непосредственную проблему, оно решает проблему, с которой вы, скорее всего, столкнетесь по ходу дела. Я мог бы опубликовать ответ, чтобы проиллюстрировать это, если мой комментарий недостаточно ясен - person mfalade   schedule 14.03.2020