由于各种原因,我使用Angular过滤器将添加添加到将由ng-repeat使用的项目列表中(基本上我需要在表格的子标题下对某些项目进行分组)。
app.filter('tableFilter',
function(){
return function(items){
if (!items){
return;
}
var transformed = [];
for (var i = 0; i < items.length; i++){
if (items[i].classid){
if (i === 0 || items[i].classid !== items[i-1].classid){
transformed.push({classheader : true});
}
else{
items[i].classheader = false;
}
}
transformed.push(items[i]);
}
return transformed;
}
}
);
好消息是它有效。坏消息是它会产生错误,第一个错误是:
[$ rootScope:infdig]
http://errors.angularjs.org/1.2.23/ $ rootScope / infdig P0 = 10安培; P1 =%5B%5B%22fn%3 ...%7C%20&#39;&#39;%3B%20newVal%3A%20%5℃%22%5C %22%3B%20oldVal%3A%20undefined%22%5D%5D
这与摘要周期中的无限循环有关。我怀疑通过添加到项目列表,我正在破坏$index
使用的数组/ ng-repeat
。
我可以转换控制器/服务中的项目列表,但这似乎不正确,因为这基本上只是为了演示而完成。
答案 0 :(得分:0)
请勿更改过滤器上的项目的属性。这将再次调用forEach循环。
删除此行: items [i] .classheader = false;
如果需要更新转换数组上的classheader标志,可以更改代码以使用angular copy:
app.filter('tableFilter',
function() {
return function(items){
if (!items){
return;
}
var transformed = [];
for (var i = 0; i < items.length; i++) {
var item = angular.copy(items[i]);
if (items[i].classid) {
if (i === 0 || items[i].classid !== items[i-1].classid) {
transformed.push({classheader : true});
} else {
item.classheader = false;
}
}
transformed.push(item);
}
return transformed;
};
}
);