2014-09-04 20 views
6

Bir öğeyi saymak ve daha sonra döngü dışında göstermek için bir yer var mı?ng-yineleme - html döngüsünde sayım

<tr ng-repeat="value in values"> 
    <td>value.total</td> 
</tr> 
<tr> 
    <td>Total Of All Values: {{ total }}</td> 
</tr> 

ben her seferinde sürme aşırı olduğunu düşünüyorlar diye başarının ng-init() kullanarak denedim.

<tr ng-repeat="value in values"> 
    <td ng-init="total = total + value.total>value.total</td> 
</tr> 
<tr> 
    <td>Total Of All Values: {{ total }}</td> 
</tr> 

Denetleyicimde bir işlev yapmadan, burada yine de var mı?

+1

Eh, bu mümkün ve cevapları ne gösteriliyor ancak böyle hesaplamalar şablonda yapılmalı inanıyor musunuz? – maklemenz

+0

Soru için teşekkürler .. Bunun nasıl başarılacağını merak ediyorum .. – forgottofly

+0

@Alias ​​http://stackoverflow.com/questions/22731145/calculating-sum-of-repeated-elements-in-angularjs-ng-repeat/ 25885501 # 25885501 - Bu gönderiyi kontrol et –

cevap

6

total farklı kapsamı olacak ve döngü dışında erişilemez.

<table ng-init="total = 0"> 
<tr ng-repeat="value in values"> 
    <td ng-init="$parent.total = $parent.total + value.total">{{value.total}}</td> 
</tr> 
<tr> 
    <td>Total Of All Values: {{ total }}</td> 
</tr> 
</table> 
3

Yineleme kapsamındaki $ kapsam değişkenine (dışarıdan ng-yinelemeden) erişmek için $ parent ana sayfasından yararlanabilirsiniz. Yani şimdi başlattıktan sonra toplamı hesaplayacak ve dışarıda başlatılan $ kapsam değişkeninde saklayacaktır.

Kodu: ng tekrar başlatıldıktan

<div ng-app ng-controller="test"> 
    <table ng-init="total=0;"> 
     <tr ng-repeat="value in values"> 
      <td ng-init="$parent.total = total + value">{{value}}</td> 
     </tr> 
     <tr> 
      <td>Total Of All Values: {{ total }}</td> 
     </tr> 
    </table> 
</div> 

Working Fiddle

1

onlar ngRepeat bir zorunluluk programlama dilinde bir for döngü gibi çalışmıyor benzer görünmektedir rağmen:

bu deneyin. ngRepeat yönergesi, ayrı olarak çalışan iki adımdan oluşur. İlk olarak, tekrarlanan değerler ile bir dizi/bir harita üretir. İkinci olarak, her bir tekrar değeri için şablonu (öğenin içindeki elemanlar ngRepeat ile) oluşturur. Ancak, zorunlu bir programlama dili gibi bir kod bloğu üzerinde yineleme yapmaz.

$parent.total ile yapmaya çalıştığınız şeyi başarmış olsanız bile, dizininizin içeriği değiştiğinde bu çözümle başka tuzaklara da girebilirsiniz. Kısa kesmek için dizideki değerleri özetlemenin başka bir yolunu bulmalısınız.

$scope.total = values.reduce(function (a,b) {return a+b}); 
0

Bunu hep açabilecek JS işlevinde: Bence

, değerlerini özetlemek için en iyi yer böyle bir çizgi ile kontrol cihazıdır.

 $scope.values = data; 
     angular.forEach($scope.values,function(value){ 
      $scope.total += value.value; 
     }); 

Çalışma plunker: http://plnkr.co/edit/5WZ9alCXzq115wi3xl4B?p=preview