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.

Relaterade artiklar