AngularJS orderBy在将新项目推入数组后不工作
我有一个进度注释列表(简单对象的集合),在这个屏幕截图上,前三个在模型中,最后一个是使用push命令添加到模型中的: 在HTML中,此表示形式的定义如下: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() });
<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
之前: