Как соединить два массива маршрутов и динамически добавить canActivate: [...] к одному из них - PullRequest
0 голосов
/ 20 апреля 2020

В файле app.module у меня в настоящее время есть массив маршрутов, который выглядит следующим образом:

const ROUTES = [
  { path: '', redirectTo: 'component1', pathMatch: 'full' },
  {
    path: 'component1',
    component: Component1Component,
    canActivate: [AuthGuardService]
  },
  {
    path: 'component2'
    component: Component2Component,
    canActivate: [AuthGuardService]
  },
  {
    path: 'signin-callback',
    component: SigninRedirectCallbackComponent
  },
  { path: '**', redirectTo: '', pathMatch: 'full' }
];

Я хочу разделить этот массив на два массива PROTECTED_ROUTES и UNPROTECTED_ROUTES. В функцию getAllRoutes для всех маршрутов в массиве PROTECTED_ROUTES следует добавить параметр canActivate: [AuthGuardService]. После этого два массива объединяются и возвращаются.

Примерно так:

const PROTECTED_ROUTES = [
  {
    path: 'component1',
    component: Component1Component
  },
  {
    path: 'component2'
    component: Component2Component
  }
];

const UNPROTECTED_ROUTES = [
  { path: '', redirectTo: 'component1', pathMatch: 'full' },
  {
    path: 'signin-callback',
    component: SigninRedirectCallbackComponent
  },
  { path: '**', redirectTo: '', pathMatch: 'full' }
];

function getAllRoutes() {
  // let protectedRoutes = PROTECTED_ROUTES;
  // protectedRoutes.forEach(r => 
  //   r.
  // somehow add canActivate: [AuthGuardService]
  //   );

  protectedRoutes = protectedRoutes + UNPROTECTED_ROUTES //pseudo code
  return protectedRoutes;
}

Возможно ли добавить параметры в записи массива объектов впоследствии? Можно ли объединить два массива объектов, если они имеют разные параметры?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

В конце я мог бы решить это так:

const PROTECTED_ROUTES = [
  {
    path: 'component1',
    component: Component1Component
  },
  {
    path: 'component2'
    component: Component2Component
  }
];

const UNPROTECTED_ROUTES = [
  { path: '', redirectTo: 'component1', pathMatch: 'full' },
  {
    path: 'signin-callback',
    component: SigninRedirectCallbackComponent
  },
  { path: '**', redirectTo: '', pathMatch: 'full' }
];

function addGuard(routes: any[]): any[] {
  routes.forEach(entry => (entry.canActivate = [AuthGuardService]));
  return routes;
}

и в импорте:

    RouterModule.forRoot([...addGuard(PROTECTED_ROUTES), ...UNPROTECTED_ROUTES], {
      // ...
    })
0 голосов
/ 20 апреля 2020

создать путь защищенный и незащищенный. сделайте ваши пути дочерними по отношению к этим двум категориям, а затем примените canActiavte к / protected, чтобы он был применим ко всем его дочерним путям. и / незащищенные без canActivate будут иметь тех детей, которым не требуется canActivate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...