角度材质:鼠标悬停在表格行上时显示复选框

use*_*077 2 angular-material angular

我有一个 Angular Material 表,第一列上有一个复选框。我只想在鼠标悬停在表格行上时显示复选框。

https://stackblitz.com/angular/pabvkrmvbab?file=app%2Ftable-selection-example.css

我可以使用 css 更改悬停时的行颜色,但不确定如何使用类似的解决方案来显示复选框

.mat-row:hover {
    background-color: red;
}
Run Code Online (Sandbox Code Playgroud)

Bio*_*tox 6

使用 CSS 轻松完成。

.mat-row:hover {
  background-color: red;
}
.mat-row mat-checkbox {
  display: none;
}
.mat-row:hover mat-checkbox {
 display: block;
}
Run Code Online (Sandbox Code Playgroud)


Sud*_*nda 5

您可以按以下方式进行。

添加新的boolean所谓的财产showELEMENT_DATA

  addShowCheckboxProperty() {
    ELEMENT_DATA.map((data: any) => {
      data.show = false
    });
  }
Run Code Online (Sandbox Code Playgroud)

使用opacity属性 onmat-checkbox显示/隐藏复选框,如下所示。

<td mat-cell *matCellDef="let row">
  <mat-checkbox [style.opacity]="row.show || selection.isSelected(row) ? 100 : 0"
                (click)="$event.stopPropagation()"
                (change)="$event ? selection.toggle(row) : null"
                [checked]="selection.isSelected(row)"
                [aria-label]="checkboxLabel(row)">
  </mat-checkbox>
</td>
Run Code Online (Sandbox Code Playgroud)

处理mouseovermouseleave事件tr如下。

HTML

  <tr mat-row *matRowDef="let row; columns: displayedColumns;"
      (click)="selection.toggle(row)" 
      (mouseover)="handleMouseOver(row)" 
      (mouseleave)="handleMouseLeave(row)">
  </tr>
Run Code Online (Sandbox Code Playgroud)

TS

  handleMouseOver(row) {
    const position = row.position;
    ELEMENT_DATA.map((data: any) => {
      if (data.position === position) {
        data.show = true;
      }
    });
  }

  handleMouseLeave(row) {
    const position = row.position;
    ELEMENT_DATA.map((data: any) => {
      if (data.position === position) {
        data.show = false;
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

当你展示你的时候checkboxmouseover我认为不需要checkbox在表格标题行上全选。 找到工作StackBlitz

  • 这是一个很好的解决方案,但应该进行如下更改。将复选框的不透明度设置为零,而不是使用“*ngIf”复选框组件,并将行选择状态作为条件的一部分包含在内,以便所选行始终显示复选框“&lt;mat-checkbox [style.opacity]=” row.show || Selection.isSelected(row) ? 100 : 0" ...&gt;`。在该行的鼠标悬停中将 show 设置为 true(对于所有其他行而不是 false) - 在 mouseleave 处理程序中将 show 设置为 false - 当鼠标离开整个表时,这会隐藏该复选框。 (2认同)