这是我的数据:
$scope.data = [{
id: 1,
group: 'Parent Comment 1',
pid: 0
}, {
id: 2,
group: 'Parent Comment 2',
pid: 0
}, {
id: 3,
group: 'Child 1 P1',
pid: 1
}, {
id: 4,
group: 'Child 1 P2',
pid: 2
}, {
id: 5,
group: 'Parent Comment 3',
pid: 0
}];
我想要输出如下:
ParentComment 1
Child 1 P1
Parent Comment 2
Child 1 P2
Parent Comment 3
我尝试使用orderBy但无法获得所需的输出。
答案 0 :(得分:4)
要输出这样的(两级)树,只需将orderBy谓词表达式作为数组提供:
['pid || id', 'id']
这意味着:
parentId
或id
。使用此技巧,子项和父项将在输出中分组... id
。换句话说,您的ng-repeat
可能如下所示:
<tr ng-repeat="record in data | orderBy:['pid || id', 'id']">
<td>{{record.group}}</td>
</tr>
如果您需要处理更复杂的层次结构,可能最好重新组织您的数据,以便每个父注释都包含所有子注释。尽管如此,也可以为现有结构实现谓词:
$scope.predicate = function(el) {
var res = [];
while (el.pid) {
res.unshift(el.id);
el = $scope.data[el.pid - 1];
}
res.unshift(el.id);
return res;
};
...
<tr ng-repeat="record in data | orderBy:predicate">...
...但是有一个问题:在这段代码中,我假设元素的id
线性映射到它在源数组中的位置。否则,您必须在每个步骤中查找它,或者实现索引;两种方式都很麻烦。