2015-03-05 2 views
0

привет, я работаю с 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> 
+0

В каком HTML вы используете 'getSubTotal' или' getTotalInvoice'? – floribon

+0

i add html code – marjes

+0

Я не уверен, полностью ли понимаю, как ваше приложение должно работать. Является ли [это] (http://plnkr.co/edit/XUdht9AKsOuQYwA8sRHz?p=preview) примером даже близко к выполнению того, что вы хотите? – Trevor

ответ

4

Каждый раз, когда вы вызываете функцию getSubTotal(), она увеличивает значение TotalInvoice. Поскольку TotalInvoice также отображается в пользовательском интерфейсе, он смотрел, и его изменение приводит к getSubTotal() называться еще раз, что увеличивает TotalInvoice и т.д. и т.п.

TotalInvoice, вероятно, следует установить в 0 каждый раз, когда getSubTotal() называется. Или лучше, getSubTotal() не должен устанавливать TotalInvoice вообще. Это не его работа.

+0

, если это всегда totalinvoice возвращать только промежуточный итог, поэтому результатом является последний клиентский итог – marjes

+1

. В вашем контроллере должна быть функция getTotalInvoice, которая вычисляет общий счет-фактуру. Сумма счета не должна быть результатом N вызовов getSubTotal() из представления. Эти две функции должны быть независимыми и не иметь побочного эффекта. –

+0

Я тоже в этом думаю, но у меня много таблиц: доход, расходы, прибыль и баланс - единственный способ сделать это? Я всегда стараюсь создать наименьшее количество функций и переменных. – marjes

Смежные вопросы