Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用mat表对嵌套属性进行排序_Javascript_Angular_Angular Material_Mat Table - Fatal编程技术网

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)