Я работаю над этим несколько дней, но пока не нашел решения.
У меня есть служба сопоставления, которая должна возвращать Observable:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<any>|Promise<any>{
return Observable.forkJoin(
this.http.get(first call with queryParam),
this.http.get(second call with queryParam),
);
}
Я подписываюсь на свои данные ActivatedRoute в компоненте, и он работает очень хорошо.
НО, как вы можете видеть в приведенном выше коде, у моего компонента есть queryParam, и мои вызовы API зависят от этого queryParam. Когда я меняю его вручную, он не «разрешает» маршрут снова.
Я прекрасно понимаю почему, читаю документацию.
Есть ли у кого-нибудь обходной путь? Можно ли вообще подписаться на params и вернуть Observable в этой ситуации?
Я пробовал это до сих пор, но он не возвращает Observable, поэтому ничего не делает:
this.router.events.subscribe(event => {
if(event instanceof ResolveEnd){
// My previous Observable.forkJoin
}
});
Спасибо :) !
----------- РЕШЕНИЕ (спасибо Maximus): -----------
Добавьте в маршрутизацию:
{
path: 'some path',
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
...
}
Тогда не нужно подписываться на событие маршрута или что-то еще! Магия!