簡體   English   中英

已經在Component上的Angular router.navigate w / route guard不工作

[英]Angular router.navigate w/ route guard not working when already on Component

我試圖弄清楚為什么下面的router.navigate([''])代碼不會將用戶帶到登錄組件。 我只是留在家庭組件。 當我添加調試器; 在代碼中它似乎進入某種無限循環。

以下是流程:用戶訪問站點並立即重定向到/ login,因為Route Guard失敗。 如果他們登錄,Route Guard會通過,然后他們會轉到['']這是HomeComponent。 然后,當他們點擊退出時,我認為導航到['']會失敗,只需轉到/ login。 由於某種原因,它停留在HomeComponent上,從不導航。

home.component.ts

  logout() {
    this.userService.logout();
    this.router.navigate(['']);
  }

user.service.ts

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    let url: string = state.url;
    return this.verifyLogin(url);
  }

  verifyLogin(url: string): boolean {
    if (this.userLoggedIn) { return true; }

    this.router.navigate(['/login']);
    return false;
  }

  logout() {
    this.userLoggedIn = false;
  }

APP-routing.module.ts

const routes: Routes = [
    { path: '' , component: HomeComponent, canActivate: [UserService]},
    { path: 'login', component: LoginComponent },
    { path: 'register', component: RegisterComponent },
    { path: '**' , redirectTo: '' }
];

為什么它應該導航它已經在['']並且你再問一次去['']? 您可以在注銷時調用'this.router.navigate(['/ login'])'。

logout() {
   this.userLoggedIn = false;
   this.router.navigate(['/login']);

}

對於使用Angular 5+的用戶,可以使用router.navigate(['']) 重新加載相同的URL。 它沒有很好的文檔記錄,並且來自像.NET這樣的服務器重型框架,這感覺更自然。

添加了runGuardsAndResolvers:'always'到你的一個路徑和onSameUrlNavigation:'reload'到RouterModule初始化。

APP-routing.module.ts

const routes: Routes = [
    { path: '' , component: HomeComponent, canActivate: [UserService], runGuardsAndResolvers: 'always' },
    { path: 'login', component: LoginComponent },
    { path: 'register', component: RegisterComponent },
    { path: '**' , redirectTo: '' }
];

@NgModule({
    imports: [RouterModule.forRoot(routes, {
        onSameUrlNavigation: 'reload'
    })],
    exports: [RouterModule]
})
export class AppRoutingModule { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM