【问题标题】:Angular Material Table expand row on column/icon click角材料表在列/图标上展开行单击
【发布时间】:2018-05-21 23:40:40
【问题描述】:

关于这个主题有很多关于扩展行的问题。但是,我看到的所有实现都是通过使用类似于表格的手风琴/面板(需要做更多的事情来适应分页和排序),使用 when 谓词(在尝试使用分页时似乎有问题)来完成的,或者似乎理想的解决方案是将指令附加到 mat-row 元素。

最后一个解决方案非常接近我需要做的事情。基本上,如果您单击行上的任意位置,它将展开。请参阅此example。但是,就我而言,在其中一列中,我有一个链接,用户可以单击该链接以查看在另一个选项卡中打开的其他一些信息。因此,当您单击链接时,它将打开它并展开该行。

对我来说,这没问题,但对我们的客户来说,它不是,我能看到的最好的解决方法是让行在点击一个只有加号图标的列时展开。仅在该图标单击时展开是理想的,但现在只是小步。

有没有人遇到过类似的情况并有解决办法?只是想被放在正确的方向。到目前为止,我已经完成了附加的 stackblitz 中的所有内容,并且效果很好。只需要这最后一步让客户满意!

【问题讨论】:

    标签: angular angular-material2


    【解决方案1】:

    这是一种有点老套的方法,但它确实有效:

    HTML:

    <!-- Name Column -->
    <ng-container matColumnDef="name">
        <mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
        <mat-cell *matCellDef="let element"><span (click)="showDetails($event, element)">{{element.name}}</span> 
        </mat-cell>
    </ng-container>
    

    TS:

    showDetails(event: UIEvent, element): void {
        event.stopPropagation();
        // Do whatever with the element
    }
    

    重要的部分是您将 UIEvent(点击事件)传递给 TS 并在其上调用 stopPropagation 以阻止表格展开。

    【讨论】:

    • 可能是“hacky”,但它确实有效!打算接受答案。一个小问题是,如果一个单元格是空的——在我的例子中是可能的——那么它仍然会扩展。如果单元格中有一些内容,则基本上该解决方案有效。如果您要单击单元格中文本周围的任何位置,它仍然会展开,尽管这是可以理解的,因为该函数是在 span 标记中调用的,它只包装文本本身。可能会弄乱CSS,看看我是否可以让跨度成为整个单元格的大小。尽管如此,这绝对让我走上了正确的道路。谢谢西蒙!
    • 解决了我的具体问题。我没有将 click 事件放在 span 标签中,而是将它放在 mat-cell 标签中。到目前为止似乎运行良好,链接仍然可以点击,但不会展开该行。希望我能以这种方式多次投票!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2018-08-20
    • 2020-04-26
    • 2020-09-06
    • 2021-06-19
    相关资源
    最近更新 更多