AngularJS orderBy не работает при использовании формата date()
OrderBy:'date'
работает нормально, но, к сожалению, при добавлении или редактировании date()
<tr ng-repeat="expense in filteredlist = (expenses | filter:filterlist) | pagination: currentPage : numPerPage | orderBy:'date'">
2 ответа
Ваша проблема в том, что старые даты сравниваются как строки, а новые даты добавляются в объекты Date.
Преобразование всех старых дат в объекты Date является одним из способов исправить это:
$scope.expenses = [/* your data */];
$scope.expenses.forEach(function(expense){
expense.date = new Date(expense.date);
});
(Codepen обновлено: http://codepen.io/anon/pen/jPJJGV)
Также работает обратное - преобразование дат в (правильно отформатированные) строки при сохранении нового расхода:
$scope.addExpense = function () {
$scope.newexpense.date = $scope.newexpense.date.toISOString();
/* The rest of your creating code */
}
(Codepen обновлен, чтобы показать этот метод: http://codepen.io/anon/pen/oXVVoJ)
Выбор между указанными выше путями будет зависеть от вашей ситуации; вам нужно будет принять во внимание такие факторы, как то, как вы используете данные (то есть нужно ли вам выполнять операции с данными, подобные дате? Затем используйте первое решение), как это ожидает сервер (делает ли сервер требовать ISOStrings? Если да, то использовать второе решение) и т. д.
Но оба четко работают в обновленных решениях Codepen.
Ваша начальная дата - это isostring, тогда как отредактированная дата - это объект даты в формате javascript, который преобразуется в строку (и по некоторым причинам кавычки добавляются). Я обновил вашу ручку, добавив toIsoString()
в вашей функции сохранения. См. http://codepen.io/rsids/pen/VLRRMR?editors=101