我有这个数组:
export const routes: RouterConfig = [
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{ path: 'home', component: Home, data: {cssClass: "glyphicon-home" } },
{ path: 'a', component: A, canActivate: [AuthGuard], data : {type: UserType.A, cssClass: "glyphicon-leaf"} },
{ path: 'b', component: B, canActivate: [AuthGuard], data : {type : UserType.B, cssClass: "glyphicon-th-list"} },
{ path: 'login', component: Login, data: {cssClass: "glyphicon-asterisk" }}
];
使用AuthGuard。 AuthGuard看起来像这样:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) { }
canActivate() {
if (this.authService.isLoggedIn) { return true; }
this.router.navigate(['/login']);
return false;
}
}
因此,AuthGuard在其构造函数中具有AuthService。 AuthService是一个用@Injectable()修饰的类,它有一些方法,如login,logout和getRoutes()。我想从getRoutes中的帖子开始访问原始路径const,因为在这里我想访问路由并根据它们构建导航菜单。但是,一旦我尝试这样做,我就会收到错误' Uncaught无法解析' AuthGuard'(未定义,路由器)'的所有参数。我认为正在进行的是:我在路由中使用AuthGuard,我在AuthGuard中使用AuthService,现在我想在AuthService中使用路由,因此它是一个循环引用。
我想要做的是避免在多个地方写路线。我该如何解决这个问题?