2017-07-16 48 views
1

我的路由配置如下:獲取在路由器事件的正確網址

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

在一些模板(如果它很重要,我們稱之爲xxx.component.html)我創建了一個按鈕,使在我的404路線的一些測試:

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

有了這個,我在航線home/xxx和後按按鈕,它的作品,我的意思是去404頁,但是,則返回以下對於m E:

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

但我期待得到REAL以前的路線(home/xxx),而不是URL,我在我的按鈕設置。有沒有辦法做到這一點?

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',它不會返回它來自的REAL url。實際上,恕我直言,在Angular中處理路由太複雜了。像上次訪問過的路線這樣簡單的事情太過複雜了。 –

回答

0

這是發生了什麼,一步一步:

  1. 您是在/home/xxx
  2. 您導航到/home/unknown
  3. 路由器注意到您正在應該重定向到/404的路徑,所以它會這樣做。
  4. 你在/404,你檢查以前的網址是/home/unknown

我能想到的2種方式,這是可以解決的:

  1. 不是重定向到**/404的,只需設置404組件在路由器的路徑**。您將留在/home/unknown與404組件。
  2. 實現您自己的服務,跟蹤應用程序中訪問的url。例如,您可以訂閱來自@angular/routerLocation服務,並跟蹤訪問的網址。
+0

感謝您的回答,但它不回答我的問題......我不希望我的網址留在'/ home/unknown',我只想獲取最後一個(已知)訪問過的頁面,在這種情況下,'home/xxx'。 –