Как получить выбранный элемент из наблюдаемой асинхронности?

#angular

#angular

Вопрос:

У меня есть наблюдаемые данные:

  public documents$: Observable<SubjectRequestDocument>;
 

Что я повторяю в шаблоне:

 <ng-container *ngIf="documents$ | async as document">
    <app-checkbox (click)>="setSelected(document)"</app-checkbox>
</ng-container>
 

Когда пользователь нажимает app-checkbox , я вызываю:

 setSelected(document) {
   document.selected = !document.selected;
}
 

Итак, как получить все выбранные документы из наблюдаемых данных после щелчка:

 getSelected() {
   // HERE?
}
 

Комментарии:

1. Должен ли я использовать BehaviorSubject ?

Ответ №1:

Вы можете использовать оператор tap, чтобы получить все элементы документа примерно так:

component.ts

 documents$.pipe(tap(item=>{ this.selectedItem = item;}));
 

Затем внутри метода getSelected вы можете отфильтровать выбранный элемент.

 getSelected() {
   this.selectedItem.filter(item=>item.selected);
}
 

Комментарии:

1. Не работает, это дает мне неопределенный в tap()

2. Может быть, это потому, что его нет .subscribe(); ?

3. поскольку вы используете асинхронный канал, асинхронный канал будет внутренне подписываться, так что это не проблема, получаете ли вы какую-либо другую ошибку?

4. Я создал небольшой пример проверки this:stackblitz.com/edit/angular-ivy-rrhxfp?file=src/app /…