Angular 6路由:到同一页面的不同参数

时间:2018-12-03 20:29:04

标签: angular angular-routing

我具有以下路由子集:

    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$);

  }

编辑:要解决一些困惑-我遇到错误的程度不如我认为以一种并非旨在正常进行的方式做事。

1 个答案:

答案 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,并且只有在没有其他路由首先匹配时才应选择。