Angular JS:html表列无法正常工作

时间:2014-03-08 11:55:14

标签: jquery json angularjs sorting angularjs-ng-repeat

我在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如下:

Demo

2 个答案:

答案 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);
    }
}

从这里到你的目标很简单,你已经完成了(排序正常的字段)。

小提琴http://jsfiddle.net/KR6Xh/15/