何日も取り組んでいますが、今のところ解決策は見つかりません。
(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
}
});
ありがとうございました :) !
-----------SOLUTION(thanks Maximus):-----------
ルーティングに追加:
{
path: 'some path',
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
...
}
そうすれば、ルートイベントなどに登録する必要はありません。マジック !
ルートにはrunGuardsAndResolvers
を使用できます。公式ドキュメントの内容は次のとおりです。
...ガードとリゾルバがいつ実行されるかを定義します。デフォルトでは、ルートのマトリックスパラメーターが変更されたときにのみ実行されます。 paramsOrQueryParamsChangeに設定すると、クエリパラメータが変更されたときにも実行されます。そして、常に設定すると、毎回実行されます。
したがって、ルートを定義するときは、次のように使用できます。
{
path: 'some path',
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
...
}
これにより、ガードとリゾルバが再実行されます。