javascript - Angular 2-rutt asynkron upplösning behåller inte platsen vid navigering
Jag försöker navigera användaren till fel-sidan när de försöker komma åt en sida som inte är tillåten. Problemet är att skipLocationChange inte fungerar i detta fall. Den navigerar till fel-sidan men URL:en ändras till roten. Hur behåller man den ursprungliga URL som användaren angav?
resolve(route: ActivatedRouteSnapshot): Observable<any|boolean>|boolean {
return this.apiclientService.get('cars/' + route.params['id']).map(
response => {
if (response.data.user_id === this.authService.user().id) {
return response.data;
}
this.router.navigate(['/404'], { skipLocationChange: true });
return false;
}
).catch(error => {
this.router.navigate(['/404'], { skipLocationChange: true });
return Observable.of(false);
});
}
Svar #1
Jag tror att skipLocationChange faktiskt fungerar. Saken är att Angular inte navigerade till den nya rutten eftersom gardet misslyckades. Om du vill fånga den misslyckade URL:en, inspektera route: ActivatedRouteSnapshot-parametern.
Svar #2
Problemet är att this.route injiceras på rot-nivå, så det kommer att vara roten till rutten.
Du kan ta dig igenom rutterna för att hitta den du är intresserad av.