Используя AngularJS, как я мог бы рандомизировать порядок коллекции?
Как вы упорядочиваете список предметов в AngularJS в случайном порядке? Я думал, что встроенный фильтр orderBy
будет работать, но я не уверен, как без добавления некоторых дополнительных данных в модель. Что-то вроде бы здорово.
item in items | orderBy:random
Моя следующая мысль заключалась в создании настраиваемого фильтра, но я бы предпочел избежать этого, если есть что-то еще более доступное.
Ответы
Ответ 1
orderBy
может принимать параметр функции, как и array.sort
, поэтому вы можете использовать свой HTML выше и определить функцию random
в области видимости, например:
$scope.random = function(){
return 0.5 - Math.random();
};
Это возвращает случайное значение, иногда отрицательное, иногда положительное, иногда 0, которое будет случайным образом сортировать массив.
Ответ 2
Выполнение метода быстрой скрипки sh0ber, похоже, хорошо работает:
http://jsfiddle.net/owenmead/fa4v8/1/
<div ng-controller="MyCtrl">
<p ng-repeat="i in list|orderBy:random">{{i}}</p>
</div>
function MyCtrl($scope) {
$scope.list = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
$scope.random = function() {
return 0.5 - Math.random();
}
}
Angular orderBy использует сортировку JavaScript() в копии списка. Глядя на другой ответ, некоторые браузеры стабильны в своем роде, другие - нет. Возможно, просто протестируйте скрипку в нескольких браузерах, и вам должно быть хорошо идти:
Array.sort Сортировка стабильности в разных браузерах
PS. Не могу прокомментировать ответ sh0ber, так как у меня нет 50 rep