如何使 Angular Material table 响应式

How to make an Angular Material table responsive

我有一个包含许多列的简单 table,我希望在调整浏览器大小时 window 列能够自动缩小。 table-responsive 与 Bootstrap 一起使用,但我正在寻找与 Angular Material 类似的东西。我试图避免有 2 个 table 定义,并且不想自己在 CSS 中这样做。 Angular Material 中有标准方法吗?

<table class="mdl-data-table mdl-js-data-table mdl-shadow--2dp" flex>
    <thead>
        <th class="mdl-data-table__cell--non-numeric">Date</th>
        <th class="mdl-data-table__cell--non-numeric">Time</th>
        <th class="mdl-data-table__cell--non-numeric">Park</th>
        <th class="mdl-data-table__cell--non-numeric">Home Team</th>
        <th class="mdl-data-table__cell--non-numeric">Away Team</th>
        <th class="mdl-data-table__cell--non-numeric">Win/Loss</th>
    </thead>
    <tbody>
        <tr ng-repeat="game in games">
            <td class="mdl-data-table__cell--non-numeric">{{game.GameDate | SLS_Date}}</td>
            <td class="mdl-data-table__cell--non-numeric">{{game.GameTime | SLS_Time:'HH:mm' }}</td>
            <td class="mdl-data-table__cell--non-numeric">{{game.VenueName}}</td>
            <td class="mdl-data-table__cell--non-numeric">{{game.HomeTeamName}}</td>
            <td class="mdl-data-table__cell--non-numeric">{{game.AwayTeamName}}</td>
            <td class="mdl-data-table__cell--non-numeric">{{game.WinLoss}}</td>
        </tr>
    </tbody>
</table>

请注意,我在这里使用了 Material Design Lite table,因为 Angular Material 今天没有 table。同样的问题,包括使用 flex 和 grids。

我想新的 Material 世界不喜欢 tables,所以最好的选择是更改布局以不使用 tables。

目前无法在 MDL 中实现这一点,请查看 github 上的 this 问题。

我的 tables 也有同样的问题,但我想我必须让他们自己响应。那里有很多教程,您应该做一些研究 table 设计最适合您的响应式网站。

此外,我认为值得一试 materializecss 的 responsive tables

我创建了一个小指令,可以应用于 mat-table table 以使其响应。这样,很容易仅向应用程序中的某些 table 添加响应行为(这在我的案例中是必需的)。

所以基本上指令将每个 header 单元格(列名)的内容复制为数据属性,因此可以通过 CSS content 属性 访问它(受此 article 启发)。不幸的是 CSS 样式无法应用于指令,因此需要全局导入样式。

特征

  • 移动视图没有额外的硬编码列名称
  • 对语言更改做出反应并更新移动视图的列名称
  • 也在第 changes/updates 行做出反应(例如添加一行)
  • 在移动视图中,它仅显示通过 matSort 指令
  • 排序table 的列

这不应被视为通用解决方案,因为它当然不会涵盖所有用例。此外,table 移动视图的样式受我的特定要求约束,可能需要进行调整。但我只是想分享它,以便它可以作为其他人的起点。

Angular 12+(TS 严格模式)

由于用户 klaydze 评论中的要求,这里有一个替代版本支持在 tsconfig.json 中使用 strict: true 的要求Angular 12+.

Stackblitz using TS strict mode

Angular < 12

Stackblitz

一个简单的解决方案是用具有以下样式的 <div> 包装您的 table:

width: 100%;
overflow-x: auto;