angular - 仅当参数为Angular2中的整数时如何匹配路由?

标签 angular typescript

比如这个路由器

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

会将两个 URL /client/1234/client/asdf 传递给 ClientOpenComponent。我如何才能使 /client/asdf 匹配为 NotFound 并传递给 NotFoundComponent?

最佳答案

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

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;
}
{
    path: '/client',
    component: ClientRootComponent,
    children: [
        {path: '', component: ClientListComponent},
        {path: ':clientId', component: ClientOpenComponent, resolve: makeResolver(ClientOpenResolver), matcher: digitsMatcher}
    ]
},
{
    path: '**',
    component: NotFoundComponent
}

代码未经测试

另见

关于angular - 仅当参数为Angular2中的整数时如何匹配路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543298/

相关文章:

angular - typescript - 什么是更好的 : Get/Set properties

javascript - 元组类型的问题

typescript - 在我的 Controller 中使用模型中定义的实例方法

Angular 4 应用程序无法在 IE11 和 edge 上运行

angular - 如何动态设置 Angular 2的宽度和高度

javascript - Angular 组件库中的内联样式未显示

reactjs - thunk 调度的 TypeScript 类型是否正确?

javascript - Angular 2 从外部数据引导应用程序

Angular 与 Angular Universal 与 NGRX 商店

angular - ngx-Codemirror 游标无法正常工作-Angular 8