首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CanLoad保护在电子应用中可用吗?

CanLoad保护在电子应用中可用吗?
EN

Stack Overflow用户
提问于 2020-10-20 07:44:24
回答 1查看 89关注 0票数 0

我拥有来自BE的DTO权限,它决定了用户可以访问的应用程序的各个部分。使用NgRx选择器,我想在CanLoad保护程序中使用它,但我无法让它工作。

routes.ts

代码语言:javascript
复制
{
  path: 'acquisition',
  canLoad: [AcquisitionGuard],
  loadChildren: () => import('./acquisition/acquisition.module').then(m => m.AcquisitionModule),
  pathMatch: 'full',
},

警卫:

代码语言:javascript
复制
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {
  console.log('canLoad guard'); //never fires
  return this.store.select(fromPermission.canAcess);
}

出于某种原因,这个守卫从不开火(用console.logdebugger尝试)。当我将其更改为canActive并在“父”路由文件中执行时,它也不会触发。只有当我将其更改为canActive并将其移动到“子”routes.file时,它才会触发

acquisition.routes.ts

代码语言:javascript
复制
{
  path: 'acquisition',
  canActive: [AcquisitionGuard], //This is the only time I'll get some response from the guard
  component: AcquisitionComponent,
  children: [...],
},

编辑:--看起来这是由这样一个事实引起的,即模块一旦加载,'CanLoad‘保护就不会再次被触发。电子是否有可能同时装载所有的东西,因此不能调用这个防护装置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 07:58:11

您可以在模块中将获取路由定义为子级,并添加将处理该模块所有路由的保护的canActivateChild

代码语言:javascript
复制
// acquisition.module.ts

const acquisitionRoutes: Routes = [
    {
        path: '',
        canActivate: [AuthGuard],
        canActivateChild: [AuthGuard],
        children: [
           ...
        ]
    },
];
代码语言:javascript
复制
// 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64440673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档