我正在为我的路由器及其子设备使用CanActivate
功能,但它不起作用 - 几个月前一直在使用,但现在没有。
没有错误,警告或类似的东西我可以调试...应用程序刚刚运行,我可以到达路由器我想保护正常,因为所有其他路线。
请问您能看到以下代码有什么问题吗? 问题是我甚至没有得到任何错误。
作为Info我使用的是Angular 5.
app.router.ts
:
export const router: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full'},
{ path: 'home', component: HomeComponent},
{ path: 'signup', component: SignupComponent},
{ path: 'dashboard', canActivate: [ AuthguardGuard ],
children:
[
{ path: '', loadChildren: './dashboard/dashboard.module#DashboardModule', pathMatch: 'full' }
]
},
{ path: '**', redirectTo: 'page-not-found' }
];
export const appRoutes: ModuleWithProviders = RouterModule.forRoot(router);
dashboard.module.ts
:
const dashboardRoutes: Routes = [
{ path: 'user', redirectTo: 'user', pathMatch: 'full' },
{ path: 'user', component: UserComponent,
children: [
{ path: '', component: EditComponent },
{ path: 'userMail', component: UserMailComponent },
{ path: 'userSettings', component: UserSettingsComponent}
]
},
];
authguard.guard.ts
:
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { AuthService } from './_service/auth.service';
@Injectable()
export class AuthguardGuard implements CanActivate {
constructor( private user: AuthService ) {
console.log('In AuthGuard!');
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.user.isUserAuthenticated();
}
}
auth.service.ts
:
import { Injectable } from '@angular/core';
@Injectable()
export class AuthService {
public isUserAuthenticated;
private userName;
constructor() {
this.isUserAuthenticated = false;
}
setUserLoggedIn() {
this.isUserAuthenticated = true;
}
getUserLoggedIn() {
return this.isUserAuthenticated;
}
}
答案 0 :(得分:1)
问题已解决......我从 app.router.ts
:
{path: '', loadChildren: './dashboard/dashboard.module#DashboardModule', pathMatch: 'full'}
并使用如下:
export const router: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full'},
{ path: 'home', component: HomeComponent},
{ path: 'signup', component: SignupComponent},
{ path: 'dashboard', canActivate: [ AuthguardGuard ],
children:[
{ path: '', component: EditComponent },
{ path: 'userMail', component: UserMailComponent },
{ path: 'userSettings', component: UserSettingsComponent}
]
},
{ path: '**', redirectTo: 'page-not-found' }
];
export const appRoutes: ModuleWithProviders = RouterModule.forRoot(router);
我可以访问 authguard.guard.ts
文件,我可以直接获得预期的结果。