将新项目推入数组后,AngularJS orderBy无法正常工作

时间:2016-12-05 18:13:07

标签: angularjs angularjs-orderby

我有一个进度说明列表(简单对象的集合),在此屏幕截图中,前三个在模型中,最后一个使用push命令添加到模型中

enter image description here

在HTML中,此表示定义如下:

<div ng-repeat="item in vm.data.ProgressNotes|orderBy:'-Date'">

按日期反向排序,最近排在最前面。

将新对象添加到集合中,如下所示:

data.ProgressNotes.push({
    Note: progressNote,
    UserName: ctx$.uName,
    Date: new Date()
});

vm.data.ProgressNotes的示例模型片段:

enter image description here

问题:为什么新项目不显示在顶部,orderBy不适用于使用push添加的项目?

2 个答案:

答案 0 :(得分:2)

note对象中的Date具有不同的数据类型。在模型中,它表示为字符串,但是当您将新笔记推送到数组时,新笔记的日期为日期类型Date: new Date()。当角度按照不同的数据类型排序时,比较在相同类型的值内完成,然后按字母顺序比较类型。 我创建了一个plunker来演示这种行为。

https://plnkr.co/edit/qiKHuRWqI7YR1gJKMvOL?p=preview

答案 1 :(得分:0)

正如其他人所提到的,示例数据中Date属性的类型是字符串。您必须修改示例数据以生成Date类型的Date属性。

您可以这样做:

ProgressNotes.forEach(function(progress_note){
    progress_note.Date = new Date(progress_note.Date);
});

所以现在示例数据也将具有Date类型的Date属性。