2015-04-25 664 views
0

我正在嘗試使每條線的總數增加了前線的數值,更多的是增加數倍。 ::我已經使用過,並且仍然重複運行數次。AngularJs ngrepeat總金額計算不正確

例子。

code  value sum 
1   2.0  2.0 
2   4.0  6.0 
3   -2.0  4.0 

$scope.calcularTotal = function (dVlLancamento) { 
    $scope.dVlTotalAnterior = $scope.dVlTotalAnterior + dVlLancamento; 
    return $scope.dVlTotalAnterior; 
} 


<tr ng-repeat="item in ::rowCollection"> 
<td>{{::calcularTotal(item.dVlLancamento) | currency}}</td> 
</tr> 

只有這樣做,價值是不正確的。總結幾次。誰能幫我?

+0

你是什麼意思這是不正確的? 0 + 2 = 2 ;; 2 + 4 = 6 ;; -2 + 6 = 4。完美的作品。你想達到什麼目的 ? – sirrocco

+0

問題是,這不是這樣工作。這個例子是我想如何工作。這個價值正在增加21倍,帶來更高的價值。 – famadori

回答

1

您不能保證您的ng-repeat運行的頻率以及$ scope.dVlTotalAnterior將獲得添加到其中的數據結構中的值的次數。

問題是你依賴什麼應該是隻讀操作,「演示」操作,來修改你的作用域上的數據($ scope.dVlTotalAnterior)。這是不好的做法,這就是爲什麼你會得到令人困惑的結果。

嘗試不同的方法,這裏是一個plunkr:

http://plnkr.co/edit/GrkXKwuYcW0xXF4oBotb?p=preview

的關鍵是,你做的數據操作至少在控制器(未在視圖中):

$scope.rowCollection = [{ 
    dVlLancamento: 10 
    }, { 
    dVlLancamento: 20 
    }, { 
    dVlLancamento: 35 
    }]; 

    // Add subtotals to data 
    var sum = 0; 
    $scope.rowCollection.forEach(function(elem) { 
    sum += elem.dVlLancamento; 
    elem.subtotal = sum; 
    }) 

如果您不喜歡修改數據,那麼我會在您的作用域中建議一個函數,它返回一個添加了小計的新數據。

+0

這個解決方案非常完美。謝謝。 – famadori