我的应用中有一个订购部分:
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'
):
/order
。/order/approved
。/order/approved
上。/order/approved/approved
。Cannot match any routes
。换句话说,它进入无限循环。我该如何破解?我正在查看CellEndEdit,但是重定向后它留下了skip
查询参数,并且由于我们无法传递任何查询参数,因此它不适用于UrlTree。
如果用户转到子路由(/declined
或/approved
),我也想正确地重定向用户。