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

AngularJS orderBy在将新项目推入数组后不工作,angularjs,angularjs-orderby,Angularjs,Angularjs Orderby,我有一个进度注释列表(简单对象的集合),在这个屏幕截图上,前三个在模型中,最后一个是使用push命令添加到模型中的: 在HTML中,此表示形式的定义如下: <div ng-repeat="item in vm.data.ProgressNotes|orderBy:'-Date'"> data.ProgressNotes.push({ Note: progressNote, UserName: ctx$.uName, Date: new Date() });

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

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

<div ng-repeat="item in vm.data.ProgressNotes|orderBy:'-Date'">
data.ProgressNotes.push({
    Note: progressNote,
    UserName: ctx$.uName,
    Date: new Date()
});
ProgressNotes.forEach(function(progress_note){
    progress_note.Date = new Date(progress_note.Date);
});
vm.data.ProgressNotes的示例模型片段:


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

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


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


正如其他人所提到的,示例数据中
Date
属性的类型是string。您必须修改示例数据,以使日期类型的属性为
Date

您可以这样做:

<div ng-repeat="item in vm.data.ProgressNotes|orderBy:'-Date'">
data.ProgressNotes.push({
    Note: progressNote,
    UserName: ctx$.uName,
    Date: new Date()
});
ProgressNotes.forEach(function(progress_note){
    progress_note.Date = new Date(progress_note.Date);
});

因此,现在样本数据也将具有Date类型的Date属性。

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

您可以这样做:

<div ng-repeat="item in vm.data.ProgressNotes|orderBy:'-Date'">
data.ProgressNotes.push({
    Note: progressNote,
    UserName: ctx$.uName,
    Date: new Date()
});
ProgressNotes.forEach(function(progress_note){
    progress_note.Date = new Date(progress_note.Date);
});

因此,现在示例数据也将具有Date类型的Date属性。

您可以将数据也发布到模型中吗?我想知道日期格式是否不同。@Anthony C添加了示例模型您在示例模型中使用了字符串,但在添加新条目时使用了日期对象。
data.ProgressNotes.push({
他的代码是如何调用的?这是通过
ng点击
还是角度以外的东西(如
element.addEventListener('click',…)
)。如果它在角度循环之外,则必须调用
$scope。$apply()
@AnthonyC是正确的。您需要调用
new Date().toJSON()
在数组中推送新项以匹配现有模型的数据类型时。否则Angular会将字符串与日期进行比较。是否也可以将数据发布到模型中?我想知道日期格式是否不同。@Anthony C添加了示例模型您在示例模型中使用字符串,但在添加n时使用了日期对象ew entry.
data.ProgressNotes.push({
他的代码是如何调用的?这是通过
ng click
还是angular之外的东西(比如
element.addEventListener('click',…)
)实现的。如果它在angular循环之外,则必须调用
$scope.$apply()
@AnthonyC是正确的。您需要调用
new Date().toJSON()
在数组中推送新项以匹配现有模型的数据类型时。否则Angular会将字符串与日期进行比较。我新推送的项与初始数组中的项具有相同的数据类型,即字符串中的JSON日期格式,但仍然不起作用。确定,已解决,这是因为我在
orderBy
:我新推送的项与初始数组中的项具有相同的数据类型,即字符串形式的JSON日期格式,但仍然不起作用。好的,解决了,这是因为我将
跟踪依据
放在
orderBy
之前: