仅当paraular为Angular2中的整数时,才如何匹配路由?

RNR*_*RNR 7 typescript angular

例如这个路由器

{
    path: '/client',
    component: ClientRootComponent,
    children: [
        {path: '', component: ClientListComponent},
        {path: ':clientId', component: ClientOpenComponent, resolve: makeResolver(ClientOpenResolver)}
    ]
},
{
    path: '**',
    component: NotFoundComponent
}
Run Code Online (Sandbox Code Playgroud)

会将URL / client / 1234/ client / asdf都传递给ClientOpenComponent。如何使/ client / asdf与NotFound匹配并传递给NotFoundComponent?

Gün*_*uer 5

您可以将自定义匹配器传递给您的路线

import { defaultUrlMatcher } from '@angular/router/src/shared';

function digitsMatcher(segments: UrlSegment[], segmentGroup: UrlSegmentGroup, route: Route): UrlMatchResult | null {
  const result = defaultUrlMatcher(segments, segmentGroup, route);

  if (!result || !result.consumed || result.consumed.length < 1) {
    return;
  }

  const re = /^\d+$/;
  const match = re.exec(result.consumed[0].path);

  if (match) {
    return result;
  }

  return null;
}
Run Code Online (Sandbox Code Playgroud)
{
    path: '/client',
    component: ClientRootComponent,
    children: [
        {path: '', component: ClientListComponent},
        {path: ':clientId', component: ClientOpenComponent, resolve: makeResolver(ClientOpenResolver), matcher: digitsMatcher}
    ]
},
{
    path: '**',
    component: NotFoundComponent
}
Run Code Online (Sandbox Code Playgroud)

该代码未经测试

也可以看看

  • 如果我尝试从 '@angular/router/src/shared'; 导入 { defaultUrlMatcher } ,编译器会对我大喊大叫,我最终不得不将 `defaultUrlMatcher` 的 Angular src 复制/粘贴到我的项目中,因为它不是我的项目的一部分Angular 路由器的公共 API。 (2认同)