我在angular-JS中创建了一个应用程序,用于对表中的值进行排序。表中的某些列是动态的,并且是基于子JSON数组
创建的例如,从服务返回的JSON结构位于主JSON的其他字段包含另一个JSON数组的结构中,该数组是附加列,
在以下结构中
第一个对象有文件4 ,
第二个对象有文件1 和文件2 ,
第三个对象有文件2 和文件3 和
第四个对象有文件3 和文件4
所以总共将有四个额外的动态列,即文件1,文件2,文件3,文件4 每个对象具有相应文件字段的值,有时某些时候不存在。
<th ng-repeat="colms in getcolumns()"><a ng-click="sort_by("dont know wat to pass")">
<i>{{colms}}</i>
</a>
</th>
我已经完美地显示了动态列的表格,并且我已经使用angular-js为每个列实现了排序。但问题是排序适用于除动态列
之外的所有表列任何人都可以告诉我一些解决方案吗
我的JS-Fiddle如下:
答案 0 :(得分:1)
为了对传入的JSON文件进行排序,您需要解决JSON字段。
例如,按下File1时,您可以按“其他”字段ng-click="sort_by('others')"
排序,但它没有任何意义。
我的建议是在对动态列进行排序时实现更复杂的排序方法,如下所示:
<div ng-repeat="item in items | orderBy:foo">
和foo的实现将是:
$scope.foo = function(a, b) {
comparison code here;
}
比较函数应该在这里记录 - http://docs.angularjs.org/api/ng/filter/orderBy
答案 1 :(得分:1)
我知道您无法更改为您提供数据的服务,但您可以在控制器内部进行转换后对其进行转换。我为你创建了一个函数,它应该将列表的其他列更改为id为键,值为value的各列。
$scope.transformDatas = function() {
$scope.newDatas = [];
for(var i in $scope.datas) {
var auxData = {};
angular.forEach($scope.datas[i], function(value, key) {
if(key != 'others')
auxData[key] = value;
else {
for(var j in $scope.datas[i].others) {
var nth = 1;
while(auxData[$scope.datas[i].others[j].id + ',' + nth] != undefined)
nth++;
auxData[$scope.datas[i].others[j].id + ',' + nth] = $scope.datas[i].others[j].value;
}
}
});
$scope.newDatas.push(auxData);
}
}
从这里到你的目标很简单,你已经完成了(排序正常的字段)。