Перенаправление на дочерний маршрут - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть раздел заказа в моем приложении:

RouterModule.forChild([
  {
    path: '',
    component: OrderComponent,
    canActivate: [OrderGuard],
    children: [
      {
        path: '',
        component: OrderInfoComponent
      },
      {
        path: 'approved',
        component: OrderApprovedComponent
      },
      {
        path: 'declined',
        component: OrderDeclinedComponent
      }
    ]
  }
])

Я должен перенаправить пользователя на соответствующую страницу в зависимости от состояния заказа. Я создал охранника:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): UrlTree {
  const order = ...;   // Imagine we fetch the order here...
  let path: string;
  switch (order.state) {
    case OrderState.Default:
        path = '';
        break;
    case OrderState.Approved:
        path = 'approved';
        break;
    case OrderState.Declined:
        path = 'declined';
        break;
  }
  return this.router.parseUrl(`${state.url}/${path}`);
}

Вот что происходит (для order.state === 'approved'):

  1. Пользователь переходит на /order.
  2. Охрана перенаправляет пользователь на /order/approved.
  3. Пользователь на /order/approved.
  4. Guard перенаправляет пользователя на /order/approved/approved.
  5. Выдается ошибка Cannot match any routes.

Другими словами, оно переходит в бесконечное l oop. Как я могу сломать это? Я смотрел на это решение , но он оставляет параметр запроса skip после перенаправления и не работает с UrlTree, поскольку мы не можем передавать параметры запроса. Я также хочу правильно перенаправить пользователя, если он пошел по дочернему маршруту (/declined или /approved).

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