2017-07-16 16 views
1

を正しいURLを取得します私の404のルートでいくつかのテスト:これにより私はルートの次のような構成を持つルータのイベントで

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

が、私はそれが404ページ、しかしに行く意味、それは動作しますが、ボタンのルートhome/xxxでプレスした後だし、次はmに対して返されますE:

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

しかし、私は私が私のボタンに設定されたURL、REAL前のルート(home/xxx)を取得しないように期待していました。これを達成する方法はありますか?

PS1:私はpairwiseを使用しようとしましたが、404ルートを2回呼び出した後でのみ動作します。

私の404のコンポーネントは、次のようになります。

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

多分 'NavigationStart'イベントを使用しますか? –

+1

@ Maximusイベントは問題ではありません。私は 'filter'を完全に削除しましたが、それは元のURLを返しません。実際、IMHOでは、Angularのルートでは作業が複雑すぎます。最後に訪問したルートを取るような簡単なことは、とても複雑です。 –

答えて

0

これは、ステップバイステップで、何が起こるかです:

  1. あなたが/home/unknown
  2. にルータをナビゲート/home/xxx
  3. でありますあなたは/404にリダイレクトされるべきパス上にいることに気づきます。
  4. あなたは/404にあり、前のURLは/home/unknownです。代わりに/404**をリダイレクトする

    1. 、ちょうどルータのパス**に404コンポーネントを設定:

    私はこれを解決することができる2つの方法を考えることができます。 404コンポーネントで/home/unknownに留まります。

  5. あなたのアプリケーションにアクセスしたURLを追跡する独自のサービスを実装します。たとえば、Locationサービスを@angular/routerから購読し、訪問したURLを追跡できます。
+0

あなたの答えに感謝しますが、私の質問に答えることはできません...私はあなたのURLが '/ home/unknown'にとどまることを望んでいません、私はちょうど最後の(知られている)訪れたページを手に入れたい、 'home/xxx'。 –

関連する問題