我具有以下路由子集:
const routes: Routes = [
{ path: '', redirectTo: 'plans', pathMatch: 'full' },
{
path: 'plan/edit/:id',
component: EditPlanPageComponent,
resolve: { plan: PlanResolver, planContext: PlanContextResolver },
},
{
path: 'plan/edit/pn/:pn',
component: EditPlanPageComponent,
resolve: { plan: PlanResolver, planContext: PlanContextResolver },
},
];
您可以看到我从 plan / edit / :id 和 plan / edit / pn / :pn < / strong> 。还有其他一些参数。用户正在寻找的是几种指向同一页面的不同方法。 这不能很好地扩展。
我不确定是否有一种机制可以处理这种情况,或者我是否应该在解析器中进行处理。是否有内置的工具,应该由解析程序处理吗?提出此问题的另一种方法是:可以通过重新路由或子进程来实现这一目标,还是我完全错过了某些东西?
为记录下来,解析器中的即时消息构建如下:
resolve(route: ActivatedRouteSnapshot) {
let id = +route.paramMap.get('id');
let pn = +route.paramMap.get('pn');
//Param 3, 4,5 .....
// Determine which param has value
//Get plan With appropriate logic based upon value
return of(this.plan$);
}
编辑:要解决一些困惑-我遇到错误的程度不如我认为以一种并非旨在正常进行的方式做事。
答案 0 :(得分:3)
顺序很重要,并且Angular会进行第一个匹配。因此,这种简单的重新排序将解决您的问题。
const routes: Routes = [
{ path: '', redirectTo: 'plans', pathMatch: 'full' },
{
path: 'plan/edit/pn/:pn',
component: EditPlanPageComponent,
resolve: { plan: PlanResolver, planContext: PlanContextResolver },
},
{
path: 'plan/edit/:id',
component: EditPlanPageComponent,
resolve: { plan: PlanResolver, planContext: PlanContextResolver },
}
];
来自https://angular.io/guide/router#configuration:
路由在配置中的顺序很重要,这是通过 设计。路由器在匹配时使用首个匹配获胜策略 路线,因此应将更具体的路线放在不那么具体的上方 路线。在上述配置中,具有静态路径的路由为 首先列出,然后是与 默认路由。通配符路由排在最后,因为它匹配每个 URL,并且只有在没有其他路由首先匹配时才应选择。