我拥有来自BE的DTO权限,它决定了用户可以访问的应用程序的各个部分。使用NgRx选择器,我想在CanLoad保护程序中使用它,但我无法让它工作。
routes.ts
{
path: 'acquisition',
canLoad: [AcquisitionGuard],
loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
pathMatch: 'full',
},警卫:
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {
console.log('canLoad guard'); //never fires
return this.store.select(fromPermission.canAcess);
}出于某种原因,这个守卫从不开火(用console.log和debugger尝试)。当我将其更改为canActive并在“父”路由文件中执行时,它也不会触发。只有当我将其更改为canActive并将其移动到“子”routes.file时,它才会触发
acquisition.routes.ts
{
path: 'acquisition',
canActive: [AcquisitionGuard], //This is the only time I'll get some response from the guard
component: AcquisitionComponent,
children: [...],
},编辑:--看起来这是由这样一个事实引起的,即模块一旦加载,'CanLoad‘保护就不会再次被触发。电子是否有可能同时装载所有的东西,因此不能调用这个防护装置?
发布于 2020-10-20 07:58:11
您可以在模块中将获取路由定义为子级,并添加将处理该模块所有路由的保护的canActivateChild。
// acquisition.module.ts
const acquisitionRoutes: Routes = [
{
path: '',
canActivate: [AuthGuard],
canActivateChild: [AuthGuard],
children: [
...
]
},
];// app.routing.ts
{
path: 'acquisition',
loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
pathMatch: 'full',
};看看这个答案:Lazy load module with Router Guard with dynamic routes in Angular4
https://stackoverflow.com/questions/64440673
复制相似问题