错误:达到 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 中的哪个位置使用 getSubTotalgetTotalInvoice 我不确定我是否完全理解您的应用程序应该如何工作。 this 示例是否接近完成您想要的? 【参考方案1】:

每次调用 getSubTotal() 函数时,都会增加 TotalInvoice 的值。由于 TotalInvoice 也显示在 UI 中,因此它被监视,并且它的更改导致再次调用 getSubTotal(),从而增加 TotalInvoice 等。

TotalInvoice 应该在每次调用 getSubTotal() 时设置为 0。或者更好的是,getSubTotal() 根本不应该设置 TotalInvoice。那不是它的工作。

【讨论】:

如果总是totalinvoice只返回小计,所以结果是最后一个客户小计 您的控制器中应该有一个 getTotalInvoice 函数来计算总发票。总发票不应是视图中 N 次调用 getSubTotal() 的结果。这两个功能应该是独立的,没有副作用。 我也这么认为,但我有很多表格:收入、支出、利润和余额,是唯一的方法吗?我总是尝试创建最少的函数和变量 您还可以在加载数据时一劳永逸地计算总数,并将其存储在变量中。

以上是关于错误:达到 10 次 $digest() 迭代。中止的主要内容,如果未能解决你的问题,请参考以下文章

错误:达到 10 次 $digest() 迭代。中止

如何解决 Angular “10 $digest() 迭代次数达到”错误

AngularJs - 错误:达到 10 次 $digest() 迭代。中止

Angular JS:IE 错误:达到 10 次 $digest() 迭代。中止

范围计数器的值增加 1 会达到 10 次 $digest() 迭代。中止错误消息

达到 10 次 $digest() 迭代。中止! - 隔离范围