2015-10-14 61 views
0

我有一个具有不同命名键的对象,每个键都有它自己的字符串数组,如下所示。但是,我不能通过使用ng-order来重复我想要的方式。我想办法做到这一点ng-repeat不能正确显示keys orderBy

ng-repeat="(key, value) in $scope.myModel | orderBy: key" 

我意识到这是因为NG重复不允许通过键排序,并且我必须有一个特别的命名键值不改变,并重复为了做到这一点。无论如何,我可以通过ng-repeat正确排序我正在显示的JSon对象吗? 我希望它看起来就像是这样的:

10/14/2015 1:30:00 PM: Array[14] 
10/14/2015 9:30:00 AM: Array[14] 
10/5/2015 9:30:00 PM: Array[14] 
10/6/2015 9:30:00 PM: Array[14] 
10/7/2015 9:30:00 PM: Array[14] 

它是什么样子时,我与

ng-repeat="(key, value) in $scope.myModel" 

10/5/2015 9:30:00 PM: Array[14] 
10/6/2015 9:30:00 PM: Array[14] 
10/7/2015 9:30:00 PM: Array[14] 
10/14/2015 1:30:00 PM: Array[14] 
10/14/2015 9:30:00 AM: Array[14] 
+1

变化NG重复=“(键,值)基于myModel |排序依据:关键” 删除$范围 –

+0

这导致屏幕,因为基于myModel没有任何显示范围更大。 – user1789573

+0

由于我们无法看到您的代码,所以更好地检查控制台是否有确切的错误,但确定您不需要重复的$ scope。 –

回答

0

过滤orderBy: key显示它在这里没有用,因为你的输入是一个对象。您无法保证对象中的订单。从orderBydocumentation

订单减少的表达谓词指定阵列

你,如果你想保证为了改造$scope.myModel到一个数组。

+0

当然,但对于自定义过滤器以外的可能解决方法有任何建议吗? – user1789573

+0

您可以通过示例将'$ scope.myModel'的值或夫妻'{key:value}'推送到一个数组。 –

+0

嗯,我不能那么做,因为我有一个数组,每个元素的数组...... meh。这是因为我使用C#中的特定数据结构:字典<字符串,列表> – user1789573

0

我会准备数据,然后在ng-repeat中使用它,您可以通过抓取对象键,对它们进行排序并使用它们来创建新的排序对象来完成此操作。 这里是一个工作普拉克http://plnkr.co/edit/CktRzgo7je40gBxXILKi?p=info

//js 
    $scope.myModel = { 
    "10/14/2015 1:30:00 PM" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14], 
    "10/14/2015 9:30:00 AM" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14], 
    "10/5/2015 9:30:00 PM" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14], 
    "10/6/2015 9:30:00 PM" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14], 
    "10/7/2015 9:30:00 PM" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14] 
    }; 

    $scope.mySortedModel = {}; 

    $scope.myModelSortedKeysAsc = Object.keys($scope.myModel).sort(function(a,b){ 
     return new Date(a) - new Date(b); 
    }); 

    $scope.myModelSortedKeysAsc.forEach(function(el){ 

     $scope.mySortedModel[el] = $scope.myModel[el]; 
    }); 

    // html 

    <div ng-repeat="(key, value) in mySortedModel"> 
     {{key}--{{value}} 
    </div>