2017-09-13 57 views
0

如果我有一个路由此配置:角2路由总是通过根/

APP-routing.module.ts

const routes: Routes = [ 
    { path: '', loadChildren: './private/private.module#PrivateModule' }, 
    { path: 'login', component: LoginComponent } 
]; 

当我浏览到/login懒加载专用模块将始终加载。最大的问题是如果我有canLoad后卫,以便只有经过身份验证的用户才能访问它。但是,如果我每次去/login时都会通过canLoad后卫重新导向/login,然后再次通过canLoad等等 - 将会创建一个无限循环。任何想法或解决方法。

理想情况下,我想要有一个公共路线/login和一个专用模块/,它将包含私有模块以及其中将被加载的共享模块。我不想在路由上添加任何前缀,这就是为什么我要使用根路由/

|_ core 
|_ shared 
|_ login 
|_ private 
|____ shared 
|____ core 
|____ dashboard 
|____ etc 

编辑:

为了说明这里是截图:

enter image description here

当我去登录,你可以看到0.chunk.js已经加载是专用模块。在/路线上定义它时不应加载,而我不在/路线上。

+0

那么你的问题是什么? –

+0

如果我为根路径包含'canLoad'后卫,如何避免无限循环。换句话说,如果我导航到'/ login',如何避免通过定义的根路线? –

+0

请检查编辑。 –

回答

0

从登录路线中删除canActive,并在路由中添加canLoad: [LoginGuard]。由于您的腰部路线是在途中,因此不需要保护。

const routes: Routes = [ 
    { path: '', loadChildren: './private/private.module#PrivateModule', canLoad: [LoginGuard] }, 
    { path: 'login', component: LoginComponent } 
]; 
+0

'LoginGuard'保护已认证的用户返回'/ login'页面。延迟加载的模块也不需要'canActivate'。它应该是'canLoad'。 –

+0

在他的情况下,登录后卫正在发送到登录页面,然后登录页面发送到登录后卫并进入无限循环。所以同样的事情可以在一个后卫中处理 –

+0

改为canLoad now –