如何通过数字对象的键来颠倒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>
例如,我想这是从最近排序,最早的
答
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;
};
});
希望它能帮助:)
如果你想按日期顺序相反则只是把命令“ - ”字段名之前。所以代码将是“(日期,文本)in data | orderBy:' - date'” – Anita
use filter ..我的意思是-ng-repeat ='(date,text)in data s | orderBy:date:reverse' – Ved
感谢球员们,但我试过用我的问题中的更新代码,它似乎并没有工作。 –