Как создать промежуточные итоги в ng-повтор в Angular JS - PullRequest
0 голосов
/ 04 марта 2019

Я только изучаю AngularJS и мне нужно создать отчет ниже.У меня все линии детализации работают хорошо, но я не знаю, как создать строки промежуточных итогов.

Линии подробностей ...

<tr data-ng-repeat-start="t in testReferrers">
    <td>{{t.ReferrerName}}</td>
    <td>{{t.AddressLine1}}}</td>
    <td>{{t.DatePlaced  | date:'MM/dd/yyyy'}}</td>
    <td>{{t.InvoiceNumber }}</td>
    <td>{{t.InvoiceAmountLessDiscount | currency : $ : 2 }}</td>
</tr>

Моя первая попытка создания линий промежуточных итогов, но я нене знает, как рассчитать {{subTotal}} и как контролировать, когда появляется эта строка.Мне нужна возможность группирования и нижнего колонтитула, но я не знаю, как это сделать в AngularJS.Я собирался использовать JQuery, чтобы найти subTotalRow и показать или скрыть ...

<tr id="subtotalRow" data-ng-repeat-end style="display:none">
    <td colspan=3></td>
    <td style="border-top: solid 1px #000000">Total:</td>
    <td style="border-top: solid 1px #000000">{{subTotal | currency : $ : 2 }}</td>
</tr>

Желаемый вывод ...

enter image description here

1 Ответ

0 голосов
/ 04 марта 2019

angular.module('app', []).controller('ctrl', function($scope){
  $scope.data = [
    {Referrer: 'Henry', Amount: 20, Location: 'NY'},
    {Referrer: 'Tom', Amount: 10, Location: 'London'},    
    {Referrer: 'Sam', Amount: 10, Location: 'Paris'},
    {Referrer: 'Henry', Amount: 10, Location: 'NY'},
    {Referrer: 'Tom', Amount: 20, Location: 'London'},    
    {Referrer: 'Henry', Amount: 30, Location: 'NY'}
  ];
  $scope.sum = function(name){
    return $scope.data.filter(function(x) { return x.Referrer == name; })
      .map(function(x) { return x.Amount; }).reduce(function(a, b) { return a + b; });
  }
})
table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
.totalRow{
  border-style: solid;  
}
.total{  
  text-align: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js">
</script>

<div ng-app='app' ng-controller='ctrl'>
  <table>
    <thead>
      <tr>
        <th>Referrer</th>
        <th>Location</th>        
        <th>Amount</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-init='next = $index + 1' ng-repeat-start='item in dataSorted = (data | orderBy : "Referrer")'>
        <td>{{item.Referrer}}</td>
        <td>{{item.Location}}</td>
        <td>{{item.Amount}}</td>
      </tr>
      <tr class='totalRow' ng-repeat-end ng-if='!dataSorted[next] || (dataSorted[next].Referrer != item.Referrer)'>
        <td colspan='2' class='total'>Total:</td>        
        <td>{{sum(item.Referrer)}}</td>
      </tr>
    </tbody>
  </table>
</div>
...