You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular Material表格中双击单元格获取列名?

解决方案

要实现双击单元格获取对应列名,需要把双击事件从<tr mat-row>移到每个<td mat-cell>上,同时传递该列的定义标识(即matColumnDef的值)。

1. 修改模板中的单元格事件

给每个列的<td mat-cell>绑定双击事件,传入当前行数据和对应列名:

<!-- 第一列示例 -->
<ng-container matColumnDef="DT_primaInstallazione">
  <th mat-header-cell *matHeaderCellDef> Data prima installazione </th>
  <td mat-cell *matCellDef="let row" (dblclick)="openFilters(row, 'DT_primaInstallazione')"> 
    {{row.DT_primaInstallazione | date: 'dd/MM/YYYY'}} 
  </td>
</ng-container>

<!-- 第二列示例 -->
<ng-container matColumnDef="DT_fineGaranziaHW">
  <th mat-header-cell *matHeaderCellDef> Data fine garanzia HW </th>
  <td mat-cell *matCellDef="let row" (dblclick)="openFilters(row, 'DT_fineGaranziaHW')"> 
    {{row.DT_fineGaranziaHW | date: 'dd/MM/YYYY'}} 
  </td>
</ng-container>

<!-- 其余列按相同逻辑修改,确保每个mat-cell都绑定dblclick并传入对应列名 -->

同时移除整行上的双击事件:

<tr mat-row *matRowDef="let row; columns: subdisplayedColumns"></tr>

2. 更新组件中的openFilters方法

在组件类里修改方法,接收行数据和列名参数,通过switch逻辑打开对应对话框:

openFilters(row: any, columnName: string): void {
  switch(columnName) {
    case 'DT_primaInstallazione':
      // 打开首次安装日期对应的对话框
      // this.dialog.open(InstallDateDialogComponent, { data: row });
      console.log('触发首次安装日期对话框', row);
      break;
    case 'DT_fineGaranziaHW':
      // 打开硬件保修截止日期对应的对话框
      // this.dialog.open(WarrantyDateDialogComponent, { data: row });
      console.log('触发硬件保修日期对话框', row);
      break;
    case 'anniGaranzia':
      // 打开保修年限对应的对话框
      console.log('触发保修年限对话框', row);
      break;
    // 依次添加其他列的case逻辑
    default:
      console.log('未匹配到列:', columnName);
      break;
  }
}

逻辑说明

之前把事件绑定在整行上,无法区分点击的具体单元格。将事件绑定到每个单元格后,直接传递该列的matColumnDef标识,就能精准识别双击的列,进而执行对应的对话框打开逻辑。

内容的提问来源于stack exchange,提问作者user21234192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:56:35