想象一下,您有一组数据,其中包含一个实际上是日期/时间戳的属性。可能有任何天数,但在这种情况下,日期的唯一部分是日期的时间部分。
如何仅使用TIME来对ng-repeat表达式中的集合进行排序?以前需要某种操作吗?
我正在尝试使用moment.js在数据库中填充后立即替换时间戳属性。
angular.forEach($scope.timeSlots, function (timeSlot, index) {
timeSlot.BeginTime = moment(timeSlot.BeginTime).format("hh:mm A");
timeSlot.EndTime = moment(timeSlot.EndTime).format("hh:mm A");
});
在模板中使用此值时,排序时仍会考虑日期。因此,根据添加时间的日期,它们可能会出现故障。
<tr ng-repeat="timeSlot in timeSlots | orderBy: 'BeginTime'">
我还尝试将新属性完全添加到timeSlot
对象,然后按此排序。不幸的是,时间戳的日期部分似乎仍然存在。
角度控制器:
angular.forEach($scope.timeSlots, function (timeSlot, index) {
timeSlot.BeginTimeDisplay = moment(timeSlot.BeginTime).format("hh:mm A");
timeSlot.EndTimeDisplay = moment(timeSlot.EndTime).format("hh:mm A");
});
角度模板:
<tr ng-repeat="timeSlot in timeSlots | orderBy: 'BeginTimeDisplay'">
答案 0 :(得分:2)
为什么不自己计算时间戳:
var date = new Date;
date.setTime(timeSlot.BeginTime);
var seconds = date.getSeconds();
var minutes = date.getMinutes();
var hours = date.getHours();
timeSlot.ts = hours*60*60+minutes*60+seconds;
然后
<tr ng-repeat="timeSlot in timeSlots | orderBy: 'ts'">
答案 1 :(得分:0)
我认为您应该将时间转换为秒数,并保存在BeginTimeDisplay和EndTimeDisplay中,除非您显示这些属性,在这种情况下,您应该将它们保存在不同的属性中。如果这样做,orderBy angularJS子句应该可以轻松工作。