[英]Angular2: successful login and logout get redirected to localhost:3000/#
我將Angular2 rc.4(router 3.0.0-beta.2)與PathLocationStrategy一起使用。
我遇到了與計算機重定向有關的怪異問題。
情況1:首先清除瀏覽器歷史記錄/緩存的文件
從localhost:3000/login
成功登錄后,路由器將按預期重定向到localhost:3000
。
注銷后,路由器首先重定向到localhost:3000/#
然后重定向到localhost:3000/login
。
案例2:具有案例1的歷史
從localhost:3000/login
成功登錄后,路由器將重定向到localhost:3000/#
。
注銷后,路由器首先重定向到localhost:3000/#
然后重定向到localhost:3000/login
。
我的問題是為什么在上述情況下出現localhost:3000/#
,我該如何擺脫它們。
我的路線設置是
export const LoginRoutes = [
{
path: '',
redirectTo: '/myapp/dashboard',
pathMatch: 'full'
},
{ path: 'login',
component: LoginComponent
}
];
和
export const ProtectedRoutes: RouterConfig = [
{
path: '',
redirectTo: '/myapp',
pathMatch: 'full'
},
{
path: 'myapp',
component: RouteDispatcherComponent,
canActivate: [AuthGuard],
children: [
{
path: '',
redirectTo: '/myapp/dashboard',
pathMatch: 'full'
},
{
path: 'dashboard',
component: DashboardComponent
}
]
}
]
在登錄組件中,我使用this.router.navigate(['/myapp/dashboard']);
導航到我的儀表板頁面。
而AuthGuard
就像
canActivate() {
if (this.authService.isAuthenticated()) {
return true;
}
this.router.navigate(['/login']);
return false;
}
順便說一句,這發生在多個瀏覽器(chrome,firefox,safari)中。
我回來回答自己的問題。 事實證明,這不是與路由器設置有關的問題,而是我的html文件中的問題。
我有
<a href="#" (click)="logoutClick($event)">
在我的html文件中
logoutClick(event) {
this.auth.logout();
this.router.navigate(['login']);
}
在相應的ts文件中。
因此,這就是為什么它首先重定向到localhost:3000/#
然后重定向到localhost:3000/login
。 localhost:3000/#
絕對不是有效路由。 默認情況下,整個角度實例將重新加載並重定向到登錄頁面。
要解決此問題,請將html更改為
<a [routerLink]="['/login']" (click)="logoutClick($event)">
並刪除this.router.navigate(['login']);
從logoutClick(event)`方法或簡單地將html更改為
<a (click)="logoutClick($event)">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.