Пример кода из одного из моих приложений:
const routes: Routes = [
{
path: 'login',
component: SignupLoginMainContainerComponent,
canActivate: [AuthGuard],
},
{
path: 'error',
component: ErrorComponent
},
{
// lazy loading payment module
path: 'payment',
loadChildren: './modules/payment/payment.module#PaymentModule'
},
{
// lazy loading private module
path: '',
loadChildren: './modules/private/private.module#PrivateModule',
canLoad: [AuthGuard]
},
{path: '**', redirectTo: '/login'},
];
Реализация AuthGuard:
export class AuthGuard implements CanActivate, CanLoad {
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
return (some condition) ? true : false
}
canLoad(route: Route): boolean {
return (some condition based on route etc) ? true : false
}
}
Файл маршрутизации, принадлежащий частным модулям, который дополнительно загружает дополнительные дочерние модули:
const routes: Routes = [
{
path: '',
component: PrivateComponent,
canActivateChild: [AuthGuard],
children: [
{
path: 'childOne',
loadChildren: '../child-one/child-one.module#ChildOneModule',
canLoad: [AuthGuard],
},
{
path: 'childTwo',
loadChildren: '../child-two/child-two.module#ChildTwoModule',
canLoad: [AuthGuard],
},
{
path: '',
redirectTo: '/dashboard',
pathMatch: 'full',
},
],
},
];
Другой пример можно найти по адресу: https://github.com/ashishgkwd/bot/tree/24-lazy-loading-modules. AdminModule
лениво загружен в этом.