私は非同期ルート解決を終了する方法を探しています。キャンセルルートの解決
シナリオは、ユーザーがコンポーネントに必要なデータを取得するリンクをクリックしたときに、そのユーザーがヒットしたり、別のリンクをクリックしたりするというシナリオです。私は現在の解決を取り消し、新しいルーティングを開始したいと思うでしょう。
既存のルート(まだ解決フェーズにある)が処理中にルートイベントサブスクリプションが起動しないため、これらの変更をリッスンすることでルーティングを傍受することはできません。
const appRoutes: Routes = [
{
path: 'resolvableRoute',
component: ResolvableRouteComponent,
resolve: {
data: RouteResolver
}
}];
とレゾルバ:私のルータがどのように見えるかもしれ例えば
どのような方法でそのHTTP呼び出しが戻るまで
@Injectable()
export class RouteResolver implements Resolve<any> {
constructor(private http: HttpClient) {}
public resolve(router: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
return this.http.get('api/path/for/data');
}
}
、ルータは多かれ少なかれスタックです。
ルートの移行中に起動する素敵なローダーがあり、そのコンポーネントに必要なデータがなくなるまで新しいコンポーネントを表示したくないのですが、リクエストを終了できる必要があります。
例えば、私がリゾルバを使用しなかった場合、コンポーネントはコンポーネントを破棄してhttp要求を終了することができるので、そのコンポーネントがデータを取得している間(たとえばinitで)コンポーネントから移動することができます。このようにコンポーネントを実行することの欠点は、空のページを表示するか、データを取得する処理中に不完全なページを表示することです。
あなたはルートのプロパティを無効にしましたか?リクエストを終了するために使用することができます。 –
CanDeactivateは、ルートがアクティブになっている場合にのみ機能します。ルーティング状態がまだ発火している間に要求を終了する必要があります。本質的にResolveStartとResolveEndの間です。 – crowebird
はこの答えが役に立つかもしれません..https://stackoverflow.com/questions/36490926/how-to-cancel-a-httprequest-in-angular-2 –