如何在Angular 4中使用路由器URL通配符?

时间:2018-02-18 02:19:34

标签: javascript html node.js angular

我想为每个包含 / admin 的路由显示我的标头组件,或者显示具有这些网址的路由 / admin / dashboard,/ admin / users,/ admin / tasks < / strong>或者等等

app.component.html

<div id="page-wrap" class="inner-page {{router.url}}" *ngIf="router.url === '/admin'; else templateName">

  <app-header></app-header>

  <div class="page-content-wrap">

    <app-sidebar></app-sidebar>

    <div class="content-wrap panel-right">
        <router-outlet></router-outlet>
    </div>

  </div>

</div>

<ng-template #templateName>

  <div class="inner-page {{router.url}}">

    <div class="container">
        <flash-messages></flash-messages>
        <router-outlet></router-outlet>
    </div>

  </div>

</ng-template>

但上面的代码只接受/ admin。你知道我怎么能添加一个通配符,以便它接受具有/ admin / tasks,/ admin / users的路由?

这是需要改进的条件:

<div id="page-wrap" class="inner-page {{router.url}}" *ngIf="router.url === '/admin'; else templateName">

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以编写一种方法来检查网址是/admin还是以/admin/开头:

isAdminRoute(value: string): boolean {
  return /^\/admin(\/|$)/.test(value);
}

并在模板中调用它:

<div *ngIf="isAdminRoute(router.url); else templateName" ...>

您可以在this stackblitz中看到代码正常工作。

作为替代方案,您可以使用startsWith字符串方法测试网址:

<div *ngIf="route.url === '/admin' || route.url.startsWith('/admin/'); else templateName" ... >