Специалисты по угловым! Я пытаюсь понять асинхронные каналы в Angular, но я застрял в базовом сценарии. У меня есть два элемента select в пользовательском интерфейсе, один из которых содержит сообщения, а другой - связанные с ними комментарии. Я хочу установить публикацию (последнюю) как изначально выбранную для элемента select, отображающего сообщения, и я хочу использовать выбранный элемент для фильтрации связанных комментариев во втором выборе. Это не работает в моем коде, для которого я создал упрощенную версию в Stackblitz:
https://stackblitz.com/edit/angular-p6ynuy
Может ли кто-нибудь из вас объяснить мне, что я делаю не так? Это соответствующий фрагмент кода и HTML:
ngOnInit() {
this.postList$ = this.getPostList();
// latestPost$ is not is use yet, but maybe it could be used to set the selected post?
this.latestPost$ = this.postList$
.pipe(
map(posts => posts[posts.length - 1])
);
this.selectedPost$ = combineLatest([
this.postList$,
this.postSelectedAction$
])
.pipe(
map(([posts, selectedPostId]) => posts.find(post => post.id === selectedPostId))
);
this.commentList$ = this.selectedPost$
.pipe(switchMap(
post => this.getCommentList(post)
));
}
<select [ngModel]="selectedPost$ | async" (change)="onSelected($event.target.value)">
<option *ngFor="let post of postList$ | async" [ngValue]="post">
{{post.id}} {{post.title}}
</option>
</select>
<select>
<option *ngFor="let comment of commentList$ | async" [ngValue]="comment">
{{comment.id}} {{comment.postId}} {{comment.name}}
</option>
</select>