angular - canLoad nu se declanșează și modulul se încarcă în continuare?
Salut, în prezent creez o aplicație Angular și am 2 module: un GuessModule și un AdminModule; unul dintre aceste module ar trebui să fie întotdeauna încărcat, GuessModule, iar celălalt are un canLoad guard.
// app-routing.module.ts
const routes: Routes = [
{
path: '',
loadChildren: () => import('./modules/guest/guest.module').then(m => m.GuestModule),
},
{
path: 'admin',
loadChildren: () => import('./modules/admin/admin.module').then(m => m.AdminModule),
canLoad: [
AuthGuard
],
},
{
path: '**',
redirectTo: '/'
}
];
// app.component.html
<router-outlet></router-outlet>
Am un CoreModule cu AuthGuard în el :
/// CoreModule forRoot called in app.module imports CoreModule.forRoot()
static forRoot(): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
AuthGuard
],
} as ModuleWithProviders;
}
În Auth Guard-ul meu am asta:
canLoad(
route: Route,
segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {
return false; // to test
}
Dar când merg pe ruta "/" îmi sunt încărcate cele 2 module, dar doar GuessModule ar trebui să fie încărcat și nu știu de ce le primesc ambele încărcate; canLoad nu este declanșat, dar AdminModule este încărcat.
Îmi scapă ceva?
Mulțumesc.
Răspuns #1
Am observat același lucru când rulez în modul de dezvoltare, vezi modulul încărcându-se și te gândești că gardianul canLoad nu împiedică încărcarea modulului. Dar dacă faci o construcție de producție folosind comanda 'ng build --prod' și rulezi asta în browser-ul tău, ar trebui să constați că segmentul asociat modulului pe care încerci să-l protejezi într-adevăr nu se încarcă. Așadar, funcționalitatea canLoad pare să funcționeze doar în producție, nu în dezvoltare.