/ / Se han alcanzado 10 iteraciones de $ digest (). ¡Abortando! cuando agrego mi filtro personalizado - angularjs, angular-filtros

10 $ digest () iteraciones alcanzadas. Abortando cuando agrego mi filtro personalizado - angularjs, filtros angulares

Estoy haciendo un filtro porque tengo una matriz con objetos que tienen un conjunto diferente de claves, pero son iguales en términos de sus valores.
Este es mi filtro personalizado

.filter("transactionFilter", function ($filter) {
return function (data) {

if (angular.isArray(data)) {
var result = [];
angular.forEach(data, function(value , key){
if(value.type === "Delivery"){
result.push({
"customer_name" : value.customer_id.owner_name,
"date" : value.delivery_date,
"total_amount" : value.total_amount,
"type" : value.type,
"user" : value.user
});
}else {
result.push({
"customer_name" : value.customer_name,
"date" : value.date,
"total_amount" : value.total_amount,
"type" : value.type,
"user" : value.user
});
}
});
console.log(result);
return result;
} else {
return data;
}
}
});

Aplico mi filtro en mi vista así:

<tr ng-repeat="transaction in transactions | transactionFilter">
{{transaction}}
</tr>

Pero cuando aplico mi filtro recibí un error que es Se alcanzaron 10 iteraciones de $ digest (). ¡Abortando!

Respuestas

-1 para la respuesta № 1

Creas nuevos objetos en tu colección mientras estás iterando sobre la colección ... nunca es una buena idea.

Los filtros deben usarse para filtrar, no para transformar su modelo.

Prueba esto:

$scope.myTransactions = function () {

var result = [];
_.each($scope.transactions, function (transaction) {
if (angular.isArray(transaction)) {
angular.forEach(transaction, function (value, key) {
if (value.type === "Delivery") {
result.push({
"customer_name": value.customer_id.owner_name,
"date": value.delivery_date,
"total_amount": value.total_amount,
"type": value.type,
"user": value.user
});
} else {
result.push({
"customer_name": value.customer_name,
"date": value.date,
"total_amount": value.total_amount,
"type": value.type,
"user": value.user
});
}
});
} else {
result.push(transaction);
}
}
return result;
};

O reutiliza tu código:

$scope.myTransactions= $filter("transactionFilter")($scope.transactions);

Y usa este nuevo modelo en tu opinión.

<tr ng-repeat="transaction in myTransactions">
{{transaction}}
</tr>