2017-07-16 2 views
1

Ich habe die folgende Konfiguration von Routen:Immer die richtige URL im Router-Ereignissen

{ loadChildren: './public#PublicModule', path: '' }, 
{ loadChildren: './home#HomeModule', path: 'home' }, 
{ path: '**', redirectTo: '/404' } 

In einiger Vorlage (wenn es darauf ankommt, die es nennt sie xxx.component.html) ich eine Taste erstellt machen einige Tests in meiner 404 Route:

<button type="button" routerLink="unknown">Click here for unknown</button> 

Damit bin ich in Route home/xxx und nach drücken der Taste, es funktioniert, ich meine es auf Seite 404 geht, jedoch, wird die folgende für m zurück e:

NavigationEnd {id: 2, url: "/home/unknown", urlAfterRedirects: "/404"} 

Aber ich erwarte die REAL vorherige Route (home/xxx) zu bekommen, nicht die URL, die ich in meiner Schaltfläche. Gibt es einen Weg, dies zu erreichen?

PS1: Ich habe versucht, pairwise zu verwenden, aber es funktioniert nur, nachdem die Route 404 2 Mal aufgerufen.

Meine 404 Komponente wie folgt aussieht:

export class NotFoundErrorComponent { 

    public previousUrl: string; 

    constructor(
    private router: Router 
) { 
    this.router.events 
    .filter((event: any) => event instanceof NavigationEnd) 
    .subscribe((event: any) => { 
     console.log(event); 
     // this.previousUrl = event.url; 
    }); 
    } 
    ... 
} 
+0

vielleicht "NavigationStart" -Ereignis verwenden? –

+1

@Maximus das Ereignis ist nicht das Problem. Ich habe den 'Filter' komplett entfernt und es gibt mir nicht die REAL URL, von der er kommt. Tatsächlich, IMHO, ist es zu kompliziert, mit Routen in Angular zu arbeiten. Eine einfache Sache, wie die letzte besuchte Route zu nehmen ist zu kompliziert. –

Antwort

0

Dies ist, was passiert, Schritt-für-Schritt:

  1. Sie befinden sich in /home/xxx
  2. navigieren Sie zu /home/unknown
  3. Der Router stellt fest, dass Sie sich auf einem Pfad befinden, der an /404 umgeleitet werden sollte, damit es das tut.
  4. Sie sind um /404 und Sie überprüfen die vorherige URL, die /home/unknown ist.

kann ich mir vorstellen 2 Möglichkeiten, wie diese gelöst werden können:

  1. Statt **-/404 der Umleitung, stellen nur die 404-Komponente auf den Pfad ** im Router. Sie werden auf /home/unknown mit der Komponente 404 bleiben.
  2. Implementieren Sie einen eigenen Dienst, der die in Ihrer Anwendung besuchten URLs verfolgt. Zum Beispiel können Sie den Dienst Location von @angular/router abonnieren und die besuchten URLs verfolgen.
+0

Danke für deine Antwort, aber es beantwortet meine Frage nicht ... Ich möchte nicht, dass meine URL bei '/ home/unknown' bleibt, ich möchte nur die letzte (bekannte) Seite besuchen, in diesem Fall , 'home/xxx'. –

Verwandte Themen