我用一点 CSS 做到了这一点
mat-sidenav:not(.mat-drawer-opened) {
transform: translate3d(0, 0, 0) !important;
visibility: visible !important;
width: 60px !important;
overflow: hidden;
}
因此,当绘图未打开时,sidenav 的宽度为 60 像素而不是 0。足以显示您的图标。
好的,下一个问题是你需要隐藏一堆东西,比如按钮名称和其他描述性的东西,对我来说,我需要更改个人资料图像的高度并隐藏其他文本。我使用 :not 选择器以与上述相同的方式执行此操作:
mat-sidenav:not(.mat-drawer-opened) div.leftNav div.navProfile img {
width: 40px; margin: 16px 0 0px 0;
}
mat-sidenav:not(.mat-drawer-opened) .navTitle,
mat-sidenav:not(.mat-drawer-opened) .profileTitle {
display: none;
}
折叠时我不想显示按钮名称,所以我将名称包装在 *ngIf
<span class="navName" *ngIf="opened">{{ page?.name }} </span>
这应该有效,并且确实有效,但是有一个问题。ngIf 绑定到打开的事件,您会注意到事件触发时的延迟(考虑到它的动画)以在抽屉打开时显示您的标签。
为了解决这个问题,我不得不深入研究 sidenav 的 api,并找到了一个 eventemitter 调用 opensStart 和 closedStart。我在组件类中创建了一个新的布尔值,
showNavLabels: boolean;
然后将事件绑定到 HTML 中的这个布尔值。
<mat-sidenav class="sidenav" #sidenav mode="side" [(opened)]="opened"
(openedStart)='showNavLabels = !showNavLabels'
(closedStart)='showNavLabels = !showNavLabels' >
我确信有更好的方法,因为我还没有 Angular 的经验。
我希望它可以帮助你。