Для этого случая вам не нужны две розетки маршрутизатора, так как не имеет смысла иметь отдельный маршрут для настольного компьютера или мобильного устройства (или других отзывчивых точек останова).
У меня есть примерStackblitz здесь , который показывает, как настроить SideNav (lt-md
) и вкладки (gt-sm
), используя динамическую маршрутизацию JSON / данные меню.
Вы не указываете, если ваш SideNav постоянно открытна мобильном телефоне, но даже если mat-sidenav
является постоянным или временным и не отображается, ваш пользовательский интерфейс все равно будет отображаться в пределах mat-sidenav-container
.
<mat-sidenav-container>
<mat-sidenav #appDrawer mode="over" opened="false">
<mat-nav-list>
<app-menu-list-item *ngFor="let item of navItems[0].children[1].children" [item]="item">
</app-menu-list-item>
</mat-nav-list>
</mat-sidenav>
<app-top-nav fxHide.xs [navItems]="navItems[0].children[1].children"></app-top-nav>
<router-outlet></router-outlet>
</mat-sidenav-container>
Тогда в app-top-nav
здесь вы можете либоотобразить панель инструментов с кнопкой меню для открытия mat-sidenav
или md-tabs
, используя атрибуты отзывчивого fxHide
:
<mat-toolbar color="primary" class="mat-elevation-z1" fxHide.gt-sm>
<button mat-icon-button id="menu" (click)="navService.openNav()">
<mat-icon>menu</mat-icon>
</button>
<span>Dynamic Expanding Nav Drawer Example</span>
</mat-toolbar>
<nav mat-tab-nav-bar backgroundColor="primary" fxHide.lt-md>
<a mat-tab-link
*ngFor="let link of navItems"
[routerLink]="link.route"
routerLinkActive #rla="routerLinkActive"
[active]="rla.isActive">
<mat-icon class="routeIcon">{{link.iconName}}</mat-icon>
{{link.displayName}}
</a>
</nav>