2017-04-21 79 views
0

我有一個家庭組件和角度爲2的導航面板組件。當用戶在導航面板(側欄)上單擊註銷時,通過將路由器記錄到控制檯,將當前URL正確報告爲「/ login」。當用戶再次登錄時,導航面板中的路由器實例在用戶登錄後將當前路由報告爲「/ login」,路由器應將它們帶到主頁。因此,用戶永遠無法越過登錄屏幕,並且瀏覽器中的視圖和網址不會更新。如何強制路由器更新Angular 2中的當前路由?

到目前爲止,我已經試過如下:

  1. 手動清除瀏覽器緩存並刷新頁面(這似乎是解決這個問題)
  2. 結束語中ngZone通話的電話router.navigate。運行()
  3. 在主件組件的構造函數中清除Angular 2的模板緩存。

下面是一些代碼相關部分: 在用戶登錄後,處理導航(在login.component.ts)的方法

private doAfterLoggedIn() { 
    let returnRoute = this.route.snapshot.queryParams["ReturnUrl"] || "/"; 
    this.toaster.toast({ 
     title: `Welcome back!`, 
     duration: 2000 
    }); 
    this.router.navigate([returnRoute]); 
} 

適用於家庭的組件的路徑:

{ 
    path: '', 
    pathMatch: 'full', 
    component: HomeComponent, 
    resolve: { author: RouteAuthorResolver }, 
    data: { 
     panelsectionName: "home" 
    } 
}, 

註銷方法在NAV面板組分A部分:

doLogout() { 
    // leave immediately 
    this.router.navigate(["/login"]); 
} 
+1

對於初學者來說,你正在嘗試做的事情應該是有效的。我在Pluralsight的「Angular Routing」課程中做了同樣的事情。 'returnRoute'的價值是什麼?此外,使用重定向時只需要'pathMatch',而不是在導航到組件時。 – DeborahK

+0

黛博拉,謝謝你的幫助。我從路線中移除了pathMatch,但沒有運氣。 returnRoute看起來像這樣:代碼中的「/ Projects」,如下所示:url:「https:// localhost:44358/login?ReturnUrl =%2FProjects」。 –

+0

@DeborahK我也在週末看了一下你的課程,我認爲這個問題可能是路由排序,但它們都在一個模塊中,而不是多個模塊。 –

回答

1

假設您的引導組件是HomeComponent,所以在它的構造函數中檢查登錄名是否重定向到登錄組件。

constructor(activatedRoute: ActivatedRoute,router:Router){ 
    if(this.activatedRoute.url !== 'login'){ 
     if(!userService.geToken()){ 
       this.router.navigate(["/login"]); 
     } 
    } 
} 
+0

感謝您的建議,但我還沒有與此有任何運氣。導航仍然不會發生。 –

相關問題