2017-05-19 36 views
6

Przepraszam, jeśli jest gdzie indziej, ale moja normalna taktyka przeszukiwania mnie zawiodła.Angular2 Jak wyświetlić stronę błędu przy zachowaniu trasy

Chciałbym wyświetlić niestandardową stronę błędu, gdy otrzymam 500 z interfejsu API. Używam restangular i mają przechwytywania odpowiedzi, który przekierowuje na stronę błędu, kiedy otrzyma 500, przy użyciu:

this.router.navigate(['/error']);

To wszystko działa. Chciałbym jednak zachować poprzedni adres URL na pasku nawigacji przeglądarki, aby po odświeżeniu użytkownik spróbował ponownie przejść do poprzedniej strony, podczas gdy teraz musi ponownie przejść do uszkodzonej strony, aby spróbować ponownie.

Dzięki!

Odpowiedz

1

Nie ma bezpośredniego sposobu, aby to zrobić. Ale możesz przekierować na stronę błędu i zapisać poprzednią stronę w localStorage lub umieścić ją i zażądać param /error?page=redirectUrl.

Następnie, po odświeżeniu, przejdź do tej strony ponownie, używając tej wartości parametru lub danych localStorage.

+0

OK, dzięki - ja Zrobię to. –

+0

Brak problemów. Cieszę się, że to pomoże. –

-1

Powinienem wykonać ErrorComponent, który renderuje po błędach, po prostu zamień składniki na sukces lub błąd.

To jest oczywiście wspólny składnik o

try { 

} 
catch (e) { 

} 
1

Możesz dodać to:

setRouteErrorHandler(): void { 
    let errorRoute = null; 

    this.router.errorHandler = (error): void => { 
     this.location.go(errorRoute.url); 
     this.router.navigate(['/error'], { skipLocationChange: true, replaceUrl: true }); 
    }; 

    this.router.events 
     .filter((next) => next instanceOf NavigationError) 
     .subscribe((next) => { 
      errorRoute = next; 
    }); 
} 

i nazywają setRouteErrorHandler() od konstruktora AppModule lub zaimplementować własną APP_INITIALIZER

+0

Tak, to zadziałało pięknie - dzięki! –