如何在角度6的mat-nav-list中设置活动项的颜色

时间:2018-10-01 14:56:42

标签: typescript angular-material angular-material-6

我对角度6还是陌生的,这里有一个带有mat-sidenav的mat-toolbar。一切工作正常,但我想在侧面nav菜单中为活动项设置颜色。

当前我有黑色背景,我想在mat-nav-list中选择项目时设置颜色,并且尝试在每个也不起作用的项目之间设置mat-divider。

app.component.html

<mat-sidenav-container class="sidenav-container">

  <mat-sidenav #drawer class="sidenav" fixedInViewport="true" [attr.role]="(isHandset$ | async) ? 'dialog' : 'navigation'"
    [mode]="(isHandset$ | async) ? 'over' : 'side'" [opened]="!(isHandset$ | async)" style="background:black"> //current background is black
    <mat-toolbar class="menuBar">Menus</mat-toolbar>
    <mat-nav-list>
      <a class="menuTextColor" mat-list-item href="#">Link 1</a> // want to change the color of the selected item.
      <a class="menuTextColor" mat-list-item href="#">Link 2</a> // want to set divider between each item
      <a class="menuTextColor" mat-list-item href="#">Link 3</a>
    </mat-nav-list>
  </mat-sidenav>

  <mat-sidenav-content>
    <mat-toolbar class="toolbar">
      <button class="menuTextColor" type="button" aria-label="Toggle sidenav" mat-icon-button (click)="drawer.toggle()" *ngIf="isHandset$ | async">
        <mat-icon aria-label="Side nav toggle icon">menu</mat-icon>
      </button>
      <span class="toolbarHeading">Demo App</span>
    </mat-toolbar>
    <!-- Add Content Here -->
  </mat-sidenav-content>

</mat-sidenav-container>

谁能帮我解决这个问题。

3 个答案:

答案 0 :(得分:3)

如果您将Angular Router与routerLinkActive属性一起使用,则可以完成此操作。

routerLinkActive属性接受一个字符串,当routerLink为“活动”状态时,该字符串将用作CSS类。

下面的代码展示了一个典型的用例:

<mat-nav-list>
  <a mat-list-item routerLink="/home" routerLinkActive="active-list-item">Home</a>
  <a mat-list-item routerLink="/settings" routerLinkActive="active-list-item">Settings</a>
  <a mat-list-item routerLink="/about" routerLinkActive="active-list-item">About</a>
.active-list-item {
  color: #3F51B5 !important; /* Note: You could also use a custom theme */
}

一些注意事项:

  • 您可以将active-list-item更改为您想要应用的任何类名称。
  • 第二个代码段中的!important声明用于列表项样式优先于自定义样式。

这里是Stackblitz

答案 1 :(得分:2)

在Angular Materials 9.0中,您必须更改以下类别的颜色:

a.mat-list-item.active { color: #ccc; }

答案 2 :(得分:0)

希望我还不算太晚。我在mat-nav-listmat-menu上遇到了同样的问题,因此只需几行CSS,我就可以使其按我的意愿运行,尝试一下,看看它是否满足您的需求,如下所示:

[class^='mat-list-'] {
  &:hover:active {
    background: rgba(255, 255, 255, 0.04);
  }
  &:focus,
  .mat-list-text {
    background: none !important;
  }
}

[mat-menu-item].is-active,
[mat-list-item].is-active {
  background: hsla(0, 0%, 100%, 0.1) !important;
}

现在我有自定义的深色主题,因此您可能要在选择后设置颜色。 只需添加routerLinkActive="is-active",您就可以开始使用。

/最诚挚的问候