Мутировать маршруты AOT с помощью функции добавить охрану? - PullRequest
0 голосов
/ 25 июня 2019

Итак: у меня есть эта «проблема», когда у меня слишком много маршрутов, и мне нужно добавить охрану для всех этих маршрутов. Так как я использую «обстрелянный маршрут», я думал, что смогу их мутировать при обстреле, проблема здесь в том, что «мутированные маршруты» загружаются как пустые конфигурации маршрутов, «Invalid configuration of Route ''.», ... могу ли я сделать это в AOT? Или я застрял с написанием караула вручную на всех маршрутах?

export class Route {
  static withShell(routes: Routes): Routes {
    return [{
      path: '',
      component: ShellComponent,
      children: [
        {
          path: '',
          canActivate: [AuthenticationGuard],
          children: ParseRoutesForUrlbarChangeGuardIntroduction(routes)
        }
      ],
      canActivate: [SingleSignOnGuard, RedirectGuard]
    }];
  }
}


export function RouteWithPreventUrlGuard(route: Route) {
  if (route.redirectTo || !route.component) return route;
  if (route.children) {
    route.children.forEach((r, i) => {
      const canDeactivate = r.canDeactivate;
      if (!canDeactivate || canDeactivate && !canDeactivate.find(g => g instanceof PreventUrlbarChangeGuard))
        route.children[i] = RouteWithPreventUrlGuard(r);
    });
  }
  return {...route, canDeactivate: [PreventUrlbarChangeGuard, ...(route.canDeactivate || [])]};
}

export function ParseRoutesForUrlbarChangeGuardIntroduction(routes: Route[]) {
  return routes.map(r => RouteWithPreventUrlGuard(r));
}
...