使用date()格式时,AngularJS orderBy不起作用

时间:2015-08-11 13:32:18

标签: angularjs date datetime angular-ui-bootstrap angular-ui-datepicker

OrderBy:'date'工作正常,但遗憾的是,当添加修改 date()

时,它无法正常排序
<tr ng-repeat="expense in filteredlist = (expenses | filter:filterlist) | pagination: currentPage : numPerPage | orderBy:'date'">

演示:http://codepen.io/anon/pen/VLRRpq

2 个答案:

答案 0 :(得分:1)

您的问题是将旧日期作为字符串进行比较,添加的新日期是日期对象。

将所有旧日期转换为日期对象是解决此问题的一种方法:

$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解决方案。

答案 1 :(得分:1)

您的初始日期是一个isostring,而编辑的日期是一个javascript日期对象,它被转换为字符串(对于某些原因,添加了引号)。 我在您的保存功能中添加了toIsoString()来更新您的笔。 见http://codepen.io/rsids/pen/VLRRMR?editors=101