重定向到子路线

时间:2020-04-29 15:28:58

标签: angular

我的应用中有一个订购部分:

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. Guard将用户重定向到/order/approved
  3. 用户在/order/approved上。
  4. Guard将用户重定向到/order/approved/approved
  5. 引发了错误Cannot match any routes

换句话说,它进入无限循环。我该如何破解?我正在查看CellEndEdit,但是重定向后它留下了skip查询参数,并且由于我们无法传递任何查询参数,因此它不适用于UrlTree。 如果用户转到子路由(/declined/approved),我也想正确地重定向用户。

0 个答案:

没有答案