Открытие мат-сиденав с кнопки снаружи мат-сиденав-контейнера
Я пытаюсь сделать то же самое для мобильного использования, что и команды Angular Material на этом примере.
Итак, я создал свой компонент, вот так:
<app-component-0></app-component-0>
<div class="d-lg-none">
<button mat-icon-button (click)="snav.toggle()">
<mat-icon>menu</mat-icon>
</button>
<mat-sidenav-container class="sidenav-container">
<mat-sidenav #snav mode="over">
<app-menu-tree>
</app-menu-tree>
</mat-sidenav>
<mat-sidenav-content>
<router-outlet></router-outlet>
</mat-sidenav-content>
</mat-sidenav-container>
</div>
<app-component-1-desktop class="d-none d-lg-flex flex-column"></app-component-1-desktop>
Таким образом, кнопка, вызывающая действие переключения sidenav, находится за пределами mat-sidenav-container, точно так же, как в примере со stackblitz... Но у меня возникает следующая ошибка при нажатии на кнопку:
Не удается прочитать свойство 'toggle' из неопределенного
И поэтому кнопка не может открыть sidenav...
У кого-нибудь есть идея это исправить?
(Извините за мой английский, это не мой родной язык)
1 ответ
Решение
Использовать opened
вход. API: https://material.angular.io/components/sidenav/api
шаблон:
<button mat-icon-button (click)="opened = !opened">
<mat-icon>menu</mat-icon>
</button>
<mat-sidenav-container class="example-container">
<mat-sidenav #sidenav mode="over" [(opened)]="opened">
<app-menu-tree></app-menu-tree>
</mat-sidenav>
<mat-sidenav-content>
<router-outlet></router-outlet>
</mat-sidenav-content>
</mat-sidenav-container>
не забудьте определить opened
собственность в вашем компоненте.