如何通过数字对象的键来颠倒Angular ngRepeat的顺序

如何通过数字对象的键来颠倒Angular ngRepeat的顺序

问题描述:

使用Angular JS的ngRepeat指令,我怎样才能使得结果迭代按相反的顺序进行?我使用的是一个对象,其中的键是数字,我想按这些排序。如何通过数字对象的键来颠倒Angular ngRepeat的顺序

我知道你不能通过像这样的键来排序对象(不保留对数组的引用),但是这对Angular来说是否可能?

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script> 
 

 
<body> 
 
    <script> 
 
    var app = angular.module('myApp', []); 
 
    app.filter('orderObjectBy', function() { 
 
     return function(items, field, reverse) { 
 
     var filtered = []; 
 
     angular.forEach(items, function(item) { 
 
      filtered.push(item); 
 
     }); 
 
     filtered.sort(function(a, b) { 
 
      return (a[field] > b[field] ? 1 : -1); 
 
     }); 
 
     if (reverse) filtered.reverse(); 
 
     return filtered; 
 
     }; 
 
    }); 
 
    app.controller('myController', ['$scope', 
 
     function($scope) { 
 
     $scope.data = { 
 
      2013: 'oldest 4', 
 
      2014: 'older 3', 
 
      2015: 'new 2', 
 
      2016: 'newest 1' 
 
     }; 
 
     } 
 
    ]); 
 
    </script> 
 
    <div id="myApp" ng-app='myApp' ng-controller="myController"> 
 
    <div ng-repeat="(date,text) in data">{{text}}</div> 
 
    <hr/> 
 
    <div ng-repeat="(date,text) in data | orderBy:date:reverse">{{text}}</div> 
 
    <hr/> 
 
    <div ng-repeat="(date,text) in data | orderBy:'-date'">{{text}}</div> 
 
    <hr/> 
 
    <div><b>Correct Answer!:</b></div><hr/> 
 
    <div ng-repeat="(date,text) in data | orderObjectBy:date:true">{{text}}</div> 
 
    </div> 
 

 
</body>

例如,我想这是从最近排序,最早的

+0

如果你想按日期顺序相反则只是把命令“ - ”字段名之前。所以代码将是“(日期,文本)in data | orderBy:' - date'” – Anita

+0

use filter ..我的意思是-ng-repeat ='(date,text)in data s | orderBy:date:reverse' – Ved

+0

感谢球员们,但我试过用我的问题中的更新代码,它似乎并没有工作。 –

NG重复doen't工作(的是什么在此代码则相反)与它的对象,你需要创建自定义过滤器。

<div ng-repeat="(date,text) in data | orderObjectBy:date:true">{{text}}</div> 

app.filter('orderObjectBy', function() { 
    return function(items, field, reverse) { 
    var filtered = []; 
    angular.forEach(items, function(item) { 
     filtered.push(item); 
    }); 
    filtered.sort(function (a, b) { 
     return (a[field] > b[field] ? 1 : -1); 
    }); 
    if(reverse) filtered.reverse(); 
    return filtered; 
    }; 
}); 

Plunker

希望它能帮助:)

+1

谢谢!确实很有帮助。 –

+0

@d -_- b很高兴帮助你:) – squiroid

+0

实际上'ng-repeat'确实可以处理对象(即可以迭代它的属性)。这是'orderBy',除了数组之外,它不能排序任何东西。 – Javarome