Angular Material表格日期列排序失效,使用sortingDataAccessor仍未解决
解决Angular Material表格日期列排序失效问题
你的核心问题是排序时获取日期的字段路径与实际数据结构不匹配:
- HTML中日期列渲染的是
element.versions[0].createDate - 但TS代码的
sortingDataAccessor里,你写的是item.createDate,根本取不到正确的日期值,自然排序失效
修正后的TS代码
ngAfterViewInit() { this.dataSource = new MatTableDataSource(this.dataSource); this.dataSource.sort = this.sort; this.dataSource.sortingDataAccessor = ( item: any, property: any ): Date | string => { switch (property) { case 'created': // 修正字段路径,和HTML里的数据源保持一致 return new Date(item.versions?.[0]?.createDate || 0); default: return item[property]; } }; }
额外注意事项
- 加上可选链
?.和默认值|| 0,避免versions为空或versions[0]不存在时抛出错误 - 确保
createDate是合法的日期格式(比如YYYY-MM-DD或ISO格式),否则new Date()会返回Invalid Date,导致排序异常 - 确认组件中已经正确注入
MatSort实例:@ViewChild(MatSort) sort!: MatSort;
内容的提问来源于stack exchange,提问作者Nikola
相关产品推荐
相关产品推荐

