我正在尝试在我的角应用中的表上启用列排序。棘手的部分是几列直接属于ng-repeat中的项目,而其他列属于属于该项目的对象。以下是一些示例数据:
[
{
id: 1,
status: 'active',
part_number: 'XXX01',
paValues: [
{
2242_max_search_value: 500,
display_value: 500
},
{
2220_min_search_value: 10,
display_value: 10
}
],
includeInResults: true
},
{
id: 2,
status: 'active',
part_number: 'XXX02'
,
paValues: [
{
2242_max_search_value: 300,
display_value: 300
},
{
2220_min_search_value: 20,
display_value: 20
}
],
includeInResults: true
},
{
id: 3,
status: 'obsolete',
part_number: 'XXX03'
,
paValues: [
{
2242_max_search_value: 150,
display_value: 150
},
{
2220_min_search_value: 0,
display_value: "-"
}
],
includeInResults: true
}
]
我的转发器看起来像这样:
<tr ng-repeat="part in ctrl.parts|orderBy:orderByField:reverseSort" partrow="part"></tr>
在我的控制器上我有
$scope.orderByField = 'part_number';
$scope.reverseSort = false;
$scope.attributeSort = function(field, reverse) {
var paKey = controller.findKey(controller.parts[0].paValues, field + "_search_value");
$scope.orderByField = "paValues[" + paKey + "]";
$scope.reverseSort = reverse;
};
现在我可以在$scope.orderByField
更改为status
或part_number
等直接属性的字符串名称时对表格进行排序。
问题是当它以编程方式更改为paValues[0].2422_max_search_value
时,我认为应该对应于paValues列表中第一项中的2242_max_search_value
,它不会排序,我得到以下控制台错误:
错误:[$ parse:syntax]语法错误:令牌'.2422'是表达式[paValues [0] .2422_max_search_value]第12列的意外标记,从[.2422_max_search_value]开始。
如果排序在直接属性上正常工作,为什么它不能在嵌套属性上工作?