Kürzlich begann ich mit Angular2 zu spielen. Ich begann Resolver wie folgt zu verwenden:Angular2 Abbrechen der Route Übergang (bei asynchronen Resolver)
export class SomeResolver implements Resolve<[Day]> {
constructor(private api: API) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
):Observable<any> {
return this.api.get('days')
}
}
I Grund loader Code implementiert:
export class LoaderComponent {
@HostBinding('class.active') active:boolean = false;
constructor(private router: Router, private location: Location) {
router.events.subscribe(this.handleRouteChange.bind(this));
}
onCancelButtonClicked() {
this.active = false;
//Any idea?
}
private handleRouteChange(event: Event) {
if (event instanceof NavigationStart) {
console.log('START');
this.active = true;
} else
console.log('END');
this.active = false;
}
}
}
Stellen Sie sich vor, dass this.api.get('days')
führt langsam und Sie möchten Abbrechen Sie diese Anfrage wie "xhr.abort()" und zurück zur vorherigen Route. Ich habe versucht, "location.back()" zu verwenden, aber diese Route ändert nur die Router-Warteschlange. Das gleiche gilt für "router.navigate (...)". Ich konnte keine Möglichkeit finden, die Anfrage sofort abzubrechen und zur vorherigen Route zurückzukehren.
Haben Sie eine Idee, wie Sie dieses Problem angehen können?
Check [diese] (http://stackoverflow.com/questions/39061623/how-to-cancel-route-change -in-angular-2), hoffe es hilft !! –
Vielen Dank für Ihre Antwort! Ich habe Angst, dass canDeactivate ausgeführt wird, bevor Resolver seine Arbeit beginnt. Es löst nicht wirklich das Problem :( –