2016-12-18 11 views
17

Próbuję przejść użytkownika do strony błędu podczas próby uzyskania dostępu do niedozwolonej strony. Problem polega na tym, że funkcja skipLocationChange nie działa w tym przypadku. Przechodzi do strony błędu, ale adres URL zmienia się w katalog główny. Jak zachować oryginalny adres URL użytkownika?Rozgałęzienie asynchroniczne z 2 kątami nie utrzymuje położenia w nawigacji

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); 
    }); 
} 
+0

Dlaczego nie używasz strażników? https://angular.io/docs/ts/latest/guide/router.html#!#guards Nie jestem pewien, czy to naprawi twój problem, ale myślę, że to jest dokładnie to, po co są strażnicy. –

+0

Próbowałem straży (canActivate), ale problem jest taki sam + nie można przekazać danych do kontrolera, jak możemy z postanowieniem. Jeśli masz jakiś przykład, doceniam. – izupet

+0

Niestety, jakoś założyłem, że twój kod jest w komponencie. "Zdecydowanie" jest tym, co miałem na myśli. Plunker, który pozwala na reprodukcję, byłby świetny także do zobaczenia tras. –

Odpowiedz

0

Problem polega na tym, że this.route jest wstrzykiwany na poziomie root, więc będzie to główna ścieżka.

można przemierzać szlaki, aby znaleźć taki są Państwo zainteresowani w.

+0

Żadne z rozwiązań nie działa ... – izupet

1

myślę skipLocationChange rzeczywiście działa. Chodzi o to, że Angular nie nawigował po nowej trasie, ponieważ strażnik zawiódł. Jeśli chcesz uchwycić wadliwy adres URL, sprawdź parametr route: ActivatedRouteSnapshot.

Powiązane problemy