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.