Вы можете использовать forkJoin
или combineLatest
, в зависимости от ваших требований.
forkJoin
выдает результаты после завершения всех наблюдаемых, тогда как combineLatest
выдает последние значения из каждой наблюдаемой.route.queryParams
никогда не будет завершено, так как параметры маршрута могут обновляться при маршрутизации на разные страницы или когда пользователь меняет URL-адрес.Следовательно, combineLatest
лучше работает для вашего сценария.
Не забудьте импортировать forkJoin или ОбъединитьЛатест в ваш component.ts.Я не уверен, как именно работает ваш this.spinner.show (), но я добавил isLoading
в качестве логического значения, чтобы проверить, загружается он или нет.На вашем component.html,
<spinner *ngIf="isLoading"></spinner>
И на вашем component.ts,
import { Observable, combineLatest } from 'rxjs';
.
.
.
ngOnInit() {
this.loadAllData();
}
loadAllData() {
this.spinner.show();
this.isLoading = true;
const combined = combineLatest(
this.route.queryParams(),
// your service api method calls
).pipe(
map(([params1, params2]) => ({...params1, ...params2}))
);
combined.subscribe(result => {
console.log(result)
// hide spinner once loading is completed
this.spinner.hide();
this.isLoading = false;
}
}