我已创建此过滤器:
app.filter('totalItems', function() {
return function (input) {
var total = [];
input.forEach(function (value, key) {
if (total.length > 0) {
for (var i in total) {
if (input[key].descripcion == total[i].descripcion) { // 'descripcion' is an String
total[i].cantidad += 1; // 'cantidad' is a Number
} else {
total.push(input[key]);
}
}
} else {
total.push(input[key]);
}
});
return total; // It's returning just an empty array. Why?
}
});
对于这个观点:
<table>
<tr>
<th>Descripcion</th>
<th>Precio</th>
<th>Cantidad</th>
</tr>
<tr ng-repeat="(key, value) in tempCart | orderByPriority | totalItems">
<td class="ar"> {{ value.descripcion }} </td>
<td> {{ value.precio | currency: 'BsF.' }}</td>
<td> {{ value.cantidad }} </td>
</tr>
使用此控制器:
app.controller('cartController', ['$scope', '$firebase', function(sp, fb) {
var userSessionRef = new Firebase('https://XXXXX.firebaseio.com/development/user_sessions/uid/');
sp.tempCart = fb(userSessionRef);
}]);
(The reference looks like this)
过滤器的想法是对类似的项进行求和并返回一个带有总数的数组;如果有三个对象有1个苹果,则过滤器应返回带有3个苹果的一个对象。但我的尝试都没有成功。
可能出现什么问题?
先谢谢。
修改
Thanks to this,我已经将过滤器更改为最简单的过滤器:
app.filter('totalItems', function() {
return function (input) {
var output = [],
found,
x = 0,
y = 0;
for ( x = 0; x < input.length; x++ ) {
found = undefined;
for ( y = 0; y < output.length; y++ ) {
if ( input[x].id === output[y].id ) {
output[y].cantidad += 1; // This line is causing a "$digest() iterations reached" error.
found = true;
}
}
if ( !found) {
output.push( input[x] );
}
}
return output;
}
});
该功能效果很好但不是过滤器;它产生了这个错误:
错误:$ rootScope:infdig 无限$ digest循环
即使我已经阅读this explanation,我还没有找到解决问题的方法......老实说,我不知道我能做些什么。