Przy użyciu dyrektywy Angular JS ngRepeat
, w jaki sposób mogę zrobić tak, aby wynikowe iteracje przebiegały w odwrotnej kolejności? Używam obiektu, w którym klucze są liczbami, a ja chciałbym je posortować, zstępując.Jak odwrócić kolejność Angular ngRepeat za pomocą klawiszy obiektu, które są numeryczne
Wiem, że naprawdę nie można posortować obiektu za pomocą takich kluczy (bez zachowania odniesienia do tablicy), ale czy to w ogóle możliwe z 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>
Na przykład, chciałbym to uporządkować od najnowszych do najstarszych (przeciwieństwem tego, co robi w tym kodzie)
Jeśli chcesz zamówić według daty w kolejności odwrotnej potem po prostu umieścić „-” przed nazwą pola. Tak więc kod będzie "(data, tekst) w danych | orderBy: '- date" " – Anita
użyć filtra .. mam na myśli -ng-repeat =' (data, tekst) w danych s | orderBy: date: reverse ' – Ved
Dzięki chłopaki, ale próbowałem tego ze zaktualizowanym kodem w moim pytaniu nie działa. –