Angularjs 使用orderBy时取消切换到ng重复数组不起作用
这是我的问题。我有一个注释列表,它使用ng repeat来显示注释数组的内容。当用户提交评论时,我不想取消移动到该数组,以便在列表顶部显示最近的评论。这非常有效,但当我将orderBy过滤器添加到repeat时,新注释将应用到repeat的底部 以下是注释数组HTML:Angularjs 使用orderBy时取消切换到ng重复数组不起作用,angularjs,Angularjs,这是我的问题。我有一个注释列表,它使用ng repeat来显示注释数组的内容。当用户提交评论时,我不想取消移动到该数组,以便在列表顶部显示最近的评论。这非常有效,但当我将orderBy过滤器添加到repeat时,新注释将应用到repeat的底部 以下是注释数组HTML: <ul ng-repeat="comment in comments | filter:{page_id:raceID} | orderBy:'id':'reverse' track by comment.id ">
<ul ng-repeat="comment in comments | filter:{page_id:raceID} | orderBy:'id':'reverse' track by comment.id ">
<li>{{comment.id}}</li>
<li>{{comment.page_id}}</li>
<li>{{comment.user_name}}</li>
<li>{{comment.comment_copy}}</li>
</ul>
…我把汽车报废了
orderBy:'id':'reverse'
而是使用了另一篇文章中留下的自定义文件管理器。这里是自定义函数
app.filter('reverse', function() {
return function(items) {
return items.slice().reverse();
};
});
现在最新的评论仍然没有出现在页面顶部,所以我不得不从unshift改为push。这很有效。代码如下:
$scope.comment.$save(function(data) {
$scope.comments.push($scope.comment);
});
这对我很有用,但我很想知道它是如何影响绩效的: 更改:
track by comment.id
致:
unshift()
和push()
现在都应该可以工作了,但同样,不确定这会在多大程度上减慢DOM的重新生成速度。在您最初的帖子中,有几点是错误的:
orderBy:'id':'reverse'
应该是orderBy:'id':reverse
,其中reverse
是一个布尔值(因此可以用作用域中可用的变量替换,或者用硬编码的true/false替换)。目前,它默认为undefined
,并被解释为false
注释id
。它将默认为undefined
,这就是排序不能按预期工作的原因
orderBy
函数,则数组unshift
或push
将不会对您的用例产生影响track by$index
实际上阻止了orderBy
函数的工作。将其替换为要重复的对象上的唯一标识符,即按注释跟踪。首选id
。就性能而言,它们应该是类似的。不过,不使用track by
子句是最慢的选择。()过滤前的排序是否会产生影响?问题仍然存在,取消移动到阵列将显示在底部。还有其他想法吗?我已经在下面发布了我自己问题的答案,我刚刚创建了一个自定义过滤器,它可以反转数组,而不是使用angular内置的orderBy。一切如期进行。如果你有任何其他建议,请告诉我,我会试试。太好了。谢谢你回复。
track by comment.id
track by $index