Javascript 使用mat表对嵌套属性进行排序
我有下表Javascript 使用mat表对嵌套属性进行排序,javascript,angular,angular-material,mat-table,Javascript,Angular,Angular Material,Mat Table,我有下表 名称 {{employeeWrapper.employee.name} 身份证件 {{employeeWrapper.id} 从,matColumnDef和对象属性必须具有相同的名称 我在employeeWrapper.id中找到了正确的方法,并且排序工作正常 但是对于employeeWrapper.employee.name,它是第二级属性。将matColumnDef设置为employee.name或name无效。两种我都试过了 有解决此问题的方法吗?您可以编写一个小的帮助函数来
名称
{{employeeWrapper.employee.name}
身份证件
{{employeeWrapper.id}
从,matColumnDef
和对象属性必须具有相同的名称
我在employeeWrapper.id
中找到了正确的方法,并且排序工作正常
但是对于employeeWrapper.employee.name
,它是第二级属性。将matColumnDef
设置为employee.name
或name
无效。两种我都试过了
有解决此问题的方法吗?您可以编写一个小的帮助函数来计算给定路径的嵌套属性的值,并使用它覆盖
数据源的默认排序数据访问器,类似
getPropertyByPath(obj: Object, pathString: string){
return pathString.split('.').reduce((o, i) => o[i], obj);
}
dataSource.sortingDataAccessor = (data, sortHeaderId: string) => {
return getPropertyByPath(data, sortHeaderId);
};
您还必须将mat-header单元格的mat-sort-header
属性设置为与嵌套属性字符串相等(有关说明,请参阅演示)
你的答案非常有效。我只需要做一个小小的修正getPropertyByPath(data.value,sortHeaderId)
=>getPropertyByPath(data,sortHeaderId)