angular - 如何在子路由中实现带有 Angular Material 的路由选项卡?

标签 angular angular-material angular-router

我想使用 Angular Material 选项卡 https://material.angular.io/components/tabs在选项卡中带有路由器导航。

我尝试使用 <nav mat-tab-nav-bar>如文档中所示,我找到了本教程:https://nirajsonawane.github.io/2018/10/27/Angular-Material-Tabs-with-Router/
我可以在哪里找到这样的模板:

<nav mat-tab-nav-bar>
  <a mat-tab-link
    *ngFor="let link of navLinks"
    [routerLink]="link.link"
    routerLinkActive #rla="routerLinkActive"
    [active]="rla.isActive">
    {{link.label}}
  </a>
</nav>
<router-outlet></router-outlet>

但问题是,我的选项卡不在我的应用程序的根目录中,而是在子路由的子模块中。我有类似的东西:

在应用程序路由模块中:
const routes: Routes = [
  ...
  { path: 'subpath', loadChildren: () => import('./path-to-module/submodule.module').then(m => m.SubmoduleModule) },
  ...
];

在 submodule-routing-module 我应该有类似的东西:
const routes: Routes = [
  { path: '', component: FirstTabComponent },
  { path: 'tab2', component: SecondTabComponent },
]

我想要的是,如果我去 url /subpath我看到选择了第一个选项卡的选项卡,如果我转到 url /subpath/tab2我看到选择了第二个选项卡的选项卡。

知道怎么做吗?

最佳答案

我也遇到了同样的问题。我克隆了Angular-Material-Tabs-with-Router但是用一个也有子组件的子组件对其进行了修改。

子组件被称为 homehome.component.html它实现:

<nav mat-tab-nav-bar>
  <a mat-tab-link
  *ngFor="let link of navLinks"
  [routerLink]="link.link"
  routerLinkActive #rla="routerLinkActive"
  [active]="rla.isActive">
  {{link.label}}
  </a>
</nav>
<router-outlet></router-outlet>

这将创建 3 个名为 Notes 的选项卡。 , PhotosDocuments . Notes选项卡包括用于列出、查看、编辑和删除注释的其他组件。

我创建并将源添加到 GitHub 并将其导入到 Stackblitz:

GitHub

Stackblitz

关于angular - 如何在子路由中实现带有 Angular Material 的路由选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921846/

相关文章:

angular - 如何使 ng 测试在警告时失败

angular - 无法实例化循环依赖! ApplicationRef ("[ERROR ->]") : in NgModule AppModule in ./AppModule@-1:-1

angular - 如何在不将所有代码更改为 Promise 的情况下等待 rxjs Observable

css - Angular Material 建议使用 Visual Studio 社区版 2015 的 md- 标签

javascript - 如何在 Angular Material 动画之后执行代码

具有可观察订阅值的 Angular CanDeactivate Router Guard

typescript - Observable<{}> 不可分配给类型 Observable<SomeType[]>

css - 如何应用条件CSS?

如果 URL 是手动编写的,则 Angular 刷新应用程序

angular - 在你的模块中使用另一个模块 : imports vs. 在路由中使用 loadChildren