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 来演示这种行为。
正如其他人提到的,样本数据中Date
属性的类型是字符串。您将必须修改示例数据以使 Date
属性成为日期类型。
你可以这样做:
ProgressNotes.forEach(function(progress_note){
progress_note.Date = new Date(progress_note.Date);
});
所以现在示例数据也将具有 Date 属性 类型的 Date。
我有一个进度记录列表(简单对象的集合),在此屏幕截图中,前三个在模型中,最后一个是使用推送命令添加到模型中的:
在 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 来演示这种行为。
正如其他人提到的,样本数据中Date
属性的类型是字符串。您将必须修改示例数据以使 Date
属性成为日期类型。
你可以这样做:
ProgressNotes.forEach(function(progress_note){
progress_note.Date = new Date(progress_note.Date);
});
所以现在示例数据也将具有 Date 属性 类型的 Date。