Вы использовали async
в шаблоне, что означает, что привязка данных для шаблона загружена лениво.Таким образом, вы ничего не можете сделать, кроме как снова использовать async
для дочернего элемента.
<div *ngFor="let item of items | async">
<span>{{(getSubItem(item: Item) | async)?.title}}</span>
</div>
Вышеприведенное вызвало бы функцию, которая возвращает наблюдаемое, а ?
означает, что результат необязателен передсвойство title
читается.
Вы можете увидеть, каково здесь ограничение.Если вам нужно больше, чем одно свойство, вам нужно выполнить еще одну async
операцию.Это просто не практично.
Вам нужно либо загрузить все данные для шаблона, либо изменить свой API-интерфейс, чтобы получить все данные за один вызов API.
В итоге вы получитенужно что-то вроде этого.
this.itemService.fetchItems().first().subscribe((items)=>{
this.items = items;
this.items.forEach((item)=>{
this.getSubItem(item).first().subscribe((sub)=> {
// attach the child to the parent item
item.child = sub;
});
});
});
Затем вы можете перебрать items
в шаблоне и использовать item.child
для подэлемента этого родителя.Вам нужно будет использовать оператор ?
, поскольку данные загружаются лениво и не будут существовать при первом отображении элементов.