0

我已经在 Angular 中设置了我的路由和路由保护,它们非常适合阻止用户访问他们不应该访问的路由。但是,我的所有页面都有一个全局导航部分,它基本上循环遍历我的路由数组并显示所有链接(使用 *ngFor)。我希望在循环遍历它们时评估每个 Route 以查看是否使用 canActivate 该路由。这样,我就不会向用户显示他们无法访问的链接。我想以一种重复使用相同的路由保护逻辑的方式来做到这一点。

我有一系列这样的路线:

const routes: Routes = [
   { 
      path: 'dashboard-simple', 
      component: DashboardSimpleComponent,
      canActivate: RoleGuard,
      data: {roles: ['Basic']}
   },
   { 
      path: 'dashboard-advanced', 
      component: DashboardAdvancedComponent,
      canActivate: RoleGuard,
      data: {roles: ['Admin']}
   },
   // And so on...
];

模板如下所示:

<ul>
    <li *ngFor="let route of routes"><a [routerLink]="route.path">{{ route.path }}</a></li>
</ul>
4

2 回答 2

0

如果角色保护在全局模块中声明,它将在声明后执行,因为构造函数,使保护在您当前的模块中可用,希望它能工作

于 2021-03-22T21:46:04.227 回答
0

据我所知,Angular 框架中不存在这种功能。具体来说,我看到Router在 Angular 中有一个名为isActivewhere you pass in a string url 的属性,它以布尔值响应。我希望有类似的东西,我可以传递一个字符串 url 并让框架重用我设置的逻辑canActivate来返回一个布尔值。Router我在框架上或其他任何地方都找不到这种类型的逻辑。

我实现 DRY 的解决方案是创建一个可以在我的路由配置和模板中共享的方法*ngFor

于 2021-03-29T18:24:57.837 回答