AngularJS 将新项目推入数组后 orderBy 不工​​作

AngularJS orderBy is not working after new items pushed into array

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

在 HTML 中,这个 presenttion 是这样定义的:

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

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

新对象像这样添加到集合中:

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

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

问题:为什么新项目不显示在顶部,orderBy 对使用推送添加的项目不起作用??

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

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

正如其他人提到的,样本数据中Date 属性的类型是字符串。您将必须修改示例数据以使 Date 属性成为日期类型。

你可以这样做:

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

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