2016-11-02 56 views
0

我對某些路由(例如'/ profile')使用了login-guard。看起來是這樣的:Angular2路由器可以註銷後激活

canActivate() { 
    if (this.user.islogin) return true; 
    this.router.navigate(['']); 
} 

它重定向用戶到主網頁,如果他沒有登錄並試圖訪問某些路線。它工作正常。 用戶可以從任何頁面註銷。我希望我的應用程序具有下一個行爲: 如果用戶在'/ profile'頁面上並單擊'註銷',他應該通過canActivate()方法重定向到主頁面。但是這種方法在這種情況下不會被調用。我應該怎麼做才能運行canActivate()(重載頁面,手動調用)? 我註銷方法:

logout() { 
    localStorage.removeItem('auth_token'); 
    this.islogin = false; 
} 

我試圖添加this.router.navigate([this.router.url]);註銷的方法,但結果是一樣的。 只有當我重新加載頁面,angular2重定向我。 什麼是正確的方法?

回答

3

考慮到您的後衛只是使用islogin和你這個設置爲false,當用戶註銷時,最簡單的方法是,退出時簡單地重定向:

logout() { 
    localStorage.removeItem('auth_token'); 
    this.islogin = false; 
    this.router.navigate(['']); <---- ADD THIS 
} 

如果你想重用的邏輯在canActivate()不先改變路線,你可以做這樣的:

首先,注入的服務無論您是logout()

constructor(
    private router: Router, 
    private route: ActivatedRoute, 
    private canActivateGuard: CanActivateGuard) {} 

(只需使用你用來代替CanActivateGuard名稱)

接下來,調用它logout()

logout() { 
    this.canActivateGuard.canActivate(
     this.route.snapshot, 
     this.router.routerState.snapshot); 
} 
+1

問題的是,如果你登出不需要後衛的路線上,它的將要運行,這是錯誤的 –