В Angular (v12) у меня есть следующий компонент (с использованием имен фиктивных переменных):
export class DataDetailsComponent {
data$: Observable<MyDataModel>;
constructor(dataService: DataService, route: ActivatedRoute, private router: Router) {
this.data$ =
combineLatest([dataService.getDataObservable(), router.events])
.pipe(
filter(([,event]) => event instanceof ActivationEnd),
tap(([data, event]) => console.log((<ActivationEnd>event).snapshot.queryParams['id'])),
map(([data, event]) => data.filter(c => c.id === (<ActivationEnd>event).snapshot.queryParams['id'])[0]),
tap(dataItem => console.log(dataItem))
);
this.data$.subscribe(); // console.logs don't work without this
}
}
И его шаблон:
<div *ngIf="data$ | async as data; else loading">
<img [src]="data.url" [alt]="data.name">
</div>
<ng-template #loading>Loading...</ng-template>
Данные не обрабатываются, а консоль браузера пуста, если я не подпишусь на data$
. С другой стороны, когда я размещаю this.data$.subscribe();
, консоль получает правильный вывод, но представление по-прежнему пусто (зависает при Загрузка...).
Кто-нибудь может объяснить, что происходит?
combineLatest([dataService.getDataObservable(), router.events]).subscribe(console.log))
, чтобы получить больше информации - person noririco   schedule 29.05.2021tap(console.log(...))
... - person dzenesiz   schedule 29.05.2021