我正在尝试构建一个自定义过滤器,它会向数组中添加一个摘要(avg)行。 我想像这样使用它:
<tr ng-repeat="item in items | summaryRow : ['col1', 'col1'] | orderBy : 'name'"
这是我的过滤器的样子:
summaryRow.$inject = ['$parse', 'sumFilter'];
function summaryRow($parse, sumFilter) {
return function(array, fields, nameLabel) {
var row = { id: 0 }, l = array.length, setter;
row[nameLabel || 'name'] = 'Summary';
for (var i = 0, j = fields.length; i < j; i++) {
setter = $parse(fields[i]).assign;
setter(row, sumFilter(array, fields[i]) / l);
}
return array.concat(row);
}
}
问题是我希望这个额外的行可以排序并且知道项目中的变化。问题是我遇到了“10 $ digest()迭代次数。正在中止!”问题。任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
尝试在控制器中使用$filter
。这是Todd Motto写的一篇很棒的文章:
https://toddmotto.com/use-controller-filters-to-prevent-digest-performance-issues/
答案 1 :(得分:0)
找到了解决方案,这就是我想出的:
summaryRow.$inject = ['$parse', 'sumFilter'];
function summaryRow($parse, sumFilter) {
var row = {};
return function(array, fields, nameLabel) {
clearObject(row);
var l = array.length, setter;
row.id = 0;
row[nameLabel || 'name'] = 'Summary';
for (var i = 0, j = fields.length; i < j; i++) {
setter = $parse(fields[i]).assign;
setter(row, sumFilter(array, fields[i]) / l);
}
return array.concat(row);
}
}
这是clearObject实现:
function clearObject(obj) {
for (var k in obj)
delete obj[k];
}