После некоторого исследования не существует четкого решения для него, но все же мне удалось создать какое-то решение, которое должно работать.
Идея, лежащая в основе этого, состоит в том, чтобы сохранить параметры запроса в обслуживании,
Создайте сервис, который будет хранить данные:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SampleService {
data: BehaviorSubject<any> = new BehaviorSubject({});
data$: Observable<any> = this.data.asObservable();
}
впоследствии, в вашем app.component.ts
constructor(
private activatedRoute: ActivatedRoute,
private router: Router,
private sampleService: SampleService
) {}
ngOnInit(): void {
this.sampleService.data$.subscribe(console.log);
this.activatedRoute.queryParams.subscribe((data: {username: string, departure: string}) => {
if(data.hasOwnProperty('username') || data.hasOwnProperty('departure')) {
this.sampleService.data.next(data);
}
setTimeout(() => { // note this timeout is mandatory and it makes this kinda cheatfix the whole thing
this.router.navigateByUrl('/');
});
});
}
таким образом вы получите ваши параметрыхранится в теме поведения данных SampleService.Если вы хотите использовать его где-нибудь, все, что вам нужно сделать, это ввести сервис и подписаться на data$
.
Обратите внимание, что это решение содержит несколько подписок, с которыми следует обращаться осторожно, но не в теме этого вопроса.
Небольшую короткую демонстрацию можно найти здесь .Проверьте демонстрационную консоль при открытии приложения stackblitz с queryParams как /?username=foo.