具有“半”侧面​​模式的角材侧边栏

Zeq*_*ang 5 css sidebar dynamic-sizing angular-material angular

我正在为我们的项目开发动态侧栏,基本上我们想要做的是在用户单击侧栏时设置动态侧栏,当用户单击后侧栏应该折叠并仅显示图标时,动态侧栏会展开(但不显示)完全折叠,它将保留图标),例如在用户单击图标之前。我们从有角度的材质函数中使用sidenav.toggle(),该函数基本上完全关闭了侧边栏,如果我不使用toggle()函数,导航栏的“侧边”模式将不起作用。所以我想折叠到侧面模式的图标。(我们需要保留侧边模式的另一个原因是,我们还需要确保当用户展开侧边栏时,右侧内容应向右推送)

在此处输入图片说明

用户单击图标后 在此处输入图片说明

有没有办法做到这一点?

谢谢。

sha*_*kur 9

选项1:自动生成:

您可以使用“ Angular CLI组件示意图”从Material本身提供的模板中创建导航组件

ng generate @angular/material:nav your-component-name
Run Code Online (Sandbox Code Playgroud)

上面的命令将生成一个新组件,其中包括一个带有应用名称的工具栏和一个基于Material断点的响应式侧面导航。在此处查看有关角形材料原理图的更多信息


选项2:手动实施:

要实现此目的,您只需引用以下两个链接:

浏览以下代码。实现将是这样的:

<mat-drawer-container class="example-container mat-typography" autosize>
  <mat-drawer #drawer mode="side" disableClose="true" opened="true">
    <button mat-mini-fab (click)="isExpanded = !isExpanded" color="warn" style="margin: 10px;">
      <mat-icon aria-label="Menu">menu</mat-icon>
    </button>

    <mat-nav-list>
      <mat-list-item>
        <mat-icon mat-list-icon>person</mat-icon>
        <h4 mat-line *ngIf="isExpanded">Management A</h4>
      </mat-list-item>
      <mat-list-item>
        <mat-icon mat-list-icon>assignment</mat-icon>
        <h4 mat-line *ngIf="isExpanded">Management B</h4>
      </mat-list-item>
      <mat-list-item>
        <mat-icon mat-list-icon>domain</mat-icon>
        <h4 mat-line *ngIf="isExpanded">Management C</h4>
      </mat-list-item>
      <mat-list-item>
        <mat-icon mat-list-icon>folder_shared</mat-icon>
        <h4 mat-line *ngIf="isExpanded">Management X</h4>
      </mat-list-item>
    </mat-nav-list>
  </mat-drawer>

  <div class="example-sidenav-content">
    You cards and screen Contents goes here..
    Will be pushed towards right on expanding side navbar.
  </div>
</mat-drawer-container>
Run Code Online (Sandbox Code Playgroud)

侧面导航已折叠 侧面导航已扩展

  • 由于标题的隐藏/显示基于 *ngIf 没有动画发生。要使标题动画化,请使用 [class.some-animation]="isExpanded" 而不是 *ngIf。.some-animation { ...花哨的 css } (2认同)
  • 如果您已定义动画“openClose”,如 [angular.io 动画指南](https://angular.io/guide/animations#defining-animations-and-attaching-them-to-the- html-template),然后使用 `[@openClose]="isExpanded ? 'open' : 'close'"`,而不是 shaheer shukur 在上面的代码片段中使用的 `*ngIf="isExpanded"`。 (2认同)

小智 0

有一个功能请求https://github.com/angular/material2/issues/1728

如果您阅读评论,您还会发现一些关于如何在官方尚未提供的情况下自行实现它的示例。