html - 在 Angular 中,如何获取具有可扩展内容的 Mat-Table 上的行索引?

标签 html angular typescript row

我有一个使用带有可扩展内容的 mat-table 的页面。我需要能够有一个点击事件来记录我点击的表格的行号。

现在,如果我有一个没有可扩展内容的表格,我可以在 html 文件中成功使用以下内容:

<tr mat-row *matRowDef="let row; columns: displayedColumns; let i = index"
    (click)="logIndex(i)">

以及组件文件中的以下内容:

 logIndex(i)
  {
    console.log(i);
  }

但这不适用于可扩展的内容。这是我正在使用的 html 文件: Stackblitz HTML

其中包含

<tr mat-row *matRowDef="let element; columns: columnsToDisplay;let i = index;"
      class="example-element-row"
      [class.example-expanded-row]="expandedElement === element"
      (click)="expandedElement = element"
      (click)="logIndex(i)">
  </tr>

并返回“undefined”。

这是一个简单的例子。在我的实际页面中,我使用 MatTableDataSource 作为 mat-table 的数据源。我知道我可以在这种情况下使用 dataSource.filteredData.indexOf(element) 来获取行号,但是 mat-table 也使用 mat-sort 并且对表进行排序仍将返回原始数据行号,不是排序后行的索引。我可以这样做吗? 谢谢

最佳答案

Instead of using let i = index; Use let i = dataIndex

<tr mat-row 
    *matRowDef="let element; columns: columnsToDisplay; let i = dataIndex;"
  class="example-element-row"
  [class.example-expanded-row]="expandedElement === element"
  (click)="expandedElement = element"
  (click)="logIndex(i)">

来自 Github Material2 Issue Thread 的引用答案

关于html - 在 Angular 中,如何获取具有可扩展内容的 Mat-Table 上的行索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530994/

相关文章:

javascript - 我如何使这个轮播实现更好?

html - 将顶部和底部元素放入 div 后,使中间 div 耗尽所有高度和左侧

javascript - Angular Pipe - groupBy 字符串的子字符串(自定义管道)

typescript - 在 TypeScript 接口(interface)上从 JSDoc 生成文档的工具

javascript - 如何在知道前两个点和到下一个点的距离的情况下获得下一个点的坐标

javascript - 应用于导航栏的台式机和笔记本电脑的屏幕宽度

html - 在水平 div 中的文本下方对齐下划线

javascript - 没有 *.d.ts 的 JS 文件的 VS Code Intellisense

angular - 为什么我们应该在 Angular 2 中将 url 转换为安全 url?

javascript - 在 Angular 2 中以 http post 发送数据?