错误:达到 10 次 $digest() 迭代。中止
Posted
技术标签:
【中文标题】错误:达到 10 次 $digest() 迭代。中止【英文标题】:Error: 10 $digest() iterations reached. Aborting 【发布时间】:2015-05-07 12:17:37 【问题描述】:您好,我正在使用 angularjs,所以我有一个带有 branch->client->invoice->details_invoice
的数组,现在发票有每张发票的总数,我为每个客户的所有发票求和。
var TotalInvoice=0;
$scope.getSubTotal=function(indexClient,indexBranch)
var ret="0";
if($scope.data!=null)
var invoice=$scope.data[0].branch[indexBranch].client[indexClient].invoice;
if(invoice!=null)
for(var $i=0;$i<invoice.length;$i++)
if(invoice[$i].state=="3")
ret=boletas[$i].amount;
TotalInvoice+=parseFloat(boletas[$i].amount);
return (parseInt(ret)).toFixed(2);
;
总计
$scope.getTotalInvoice=function()
return (parseInt(TotalInvoice)).toFixed(2);
;
但我有这个错误
Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations:
[[.....
如果我删除TotalInvoice+=parseFloat(boletas[$i].amount);
这行错误消失,请帮助我
更新添加html
<div ng-repeat="branch in company.branch| filter: id_branch:id_b" >
<tr ng-repeat="client in branch.client.slice(page.ini,page.fin) >
<td>getSubTotal(company.branch.indexOf(branch ),branch.client.indexOf(client))</td>
</tr>
<tr> getTotalInvoice()</tr>
</div>
【问题讨论】:
您在 html 中的哪个位置使用getSubTotal
或 getTotalInvoice
?
我不确定我是否完全理解您的应用程序应该如何工作。 this 示例是否接近完成您想要的?
【参考方案1】:
每次调用 getSubTotal()
函数时,都会增加 TotalInvoice 的值。由于 TotalInvoice 也显示在 UI 中,因此它被监视,并且它的更改导致再次调用 getSubTotal()
,从而增加 TotalInvoice 等。
TotalInvoice
应该在每次调用 getSubTotal()
时设置为 0。或者更好的是,getSubTotal()
根本不应该设置 TotalInvoice。那不是它的工作。
【讨论】:
如果总是totalinvoice只返回小计,所以结果是最后一个客户小计 您的控制器中应该有一个 getTotalInvoice 函数来计算总发票。总发票不应是视图中 N 次调用 getSubTotal() 的结果。这两个功能应该是独立的,没有副作用。 我也这么认为,但我有很多表格:收入、支出、利润和余额,是唯一的方法吗?我总是尝试创建最少的函数和变量 您还可以在加载数据时一劳永逸地计算总数,并将其存储在变量中。以上是关于错误:达到 10 次 $digest() 迭代。中止的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 Angular “10 $digest() 迭代次数达到”错误
AngularJs - 错误:达到 10 次 $digest() 迭代。中止
Angular JS:IE 错误:达到 10 次 $digest() 迭代。中止