matSortmat-sort-header 用于为表格型数据添加排序状态并显示出来。

要想为表头添加排序行为和样式,请把 <mat-sort-header> 组件添加到每个表头中,并提供一个 id 来标识它。 这些表头应该包含在一个带有 matSort 指令的父元素中,当用户在表头上触发排序时,该指令将会发出一个 matSortChange 事件。

用户可以通过鼠标点击或键盘动作来为表头触发排序。这时,matSort 就会发出一个 matSortChange 事件,其中包含触发排序的表头和排序的方向(ascdesc)。

默认情况下,排序表头的排序方向先从 asc 开始,再点就变成 desc,再点一次则会移除排序。

要想逆转所有表头的排序顺序,请把 matSort 指令的 matSortStart 属性设置为 desc。 如果要对某个特定的表头逆转排序顺序,请设置那个表头自身的输入属性 start

要想阻止该用户从已经排序的列上清除排序状态,请把 matSortmatSortDisableClear 属性设置为 true 来影响所有表头,如果只想针对特定的表头,请把该表头的 disableClear 设置为 true

如果你要阻止用户修改所有列的排序状态,可以绑定 mat-sortmatSortDisabled 属性;如果只想针对单个 mat-sort-header,请绑定它的 disabled 属性。

当使用 mat-table 中的表头时,不需要为它设置 mat-sort-header,因为默认情况下它将会使用列本身的 id。

当你将 MatSortHeader 应用于标题单元格元素时,该组件会将标题单元格的内容包装在按钮内。然后标题单元格的文本内容就会成为排序按钮的无障碍标签。但是,标题单元格文本通常会描述列,而不会用来与控件交互执行排序操作。要清楚地表达标题如何执行排序,请始终使用输入属性 sortActionDescription 来提供按钮元素的描述,例如“按姓氏排序”。

MatSortHeader 应用 aria-sort 属性将当前排序状态传达给辅助技术。但是,大多数屏幕阅读器不会播报 aria-sort 值的更改,这意味着屏幕阅读器用户不会收到排序发生的反馈。要解决此问题,请使用 MatSort 指令上的 matSortChange 事件通过来自 @angular/cdk/a11yLiveAnnouncer 服务播报本次状态更新。

如果你的应用程序包含许多表和排序标头,请考虑创建自定义指令以一致地应用 sortActionDescription 并播报排序状态更改。