2

データには、ページの列よりも多くのフィールドがあります。フィールドを列に合計する必要があります。

私が持っているJSON:

{
  'foo1' : 10,
  'foo2' : 11,
  'foo3' : 5,
  'bar1' : 23,
  'bar2' : 2,
  'baz1' : 53,
  'baz2' : 43
},{
  'foo1' : 11,
  'foo2' : 41,
  'foo3' : 31,
  etc.
}

私が欲しいGRID:

Foos Bars Baz's
---- ---- -----
 26   23   96
 83  etc.

したがって、フィールドをレンダリングする前に、次のように複数のアイテムを追加できるようにしたいと考えています。

columnDefs: [{
  field: 'foo1 + foo2 + foo3',
  displayName: 'Foos' 
},{
  field: 'bar1 + bar2',
  displayName: 'Bars' 
},{
  field: 'baz1 + baz2',
  displayName: 'Baz's' 
}]

または多分何か

field : 'sumFields([foo1,foo2,foo3])'
...
$scope.sumFields = function(fieldlist){
  return fieldlist.reduce(function(pv, cv) { return pv + cv; }, 0));
};

もちろん、この疑似コードはどれも機能しません。

また、すべての列にカスタムの CellTemplate を作成することは避けたいと思います。

最悪のシナリオだと思いますが、レンダリングする前にデータをマッサージすることができます...だから、

{
  'foo1' : 10,
  'foo2' : 11,
  'foo3' : 5,
  'bar1' : 23,
  'bar2' : 2,
  'baz1' : 53,
  'baz2' : 43,

  'foos': 26,
  'bars': 23,
  'bazs': 96
},{
  'foo1' : 11,
  'foo2' : 41,
  'foo3' : 31,
  etc.
}

[編集]変更されていないグリッドを含むサンプルプランカーと、必要なものの描写を追加しました。

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

私は猫や犬や他の動物を見たいのではなく、特定の種類の合計を見たい. 私が示すよりも多くのこれらの列があるので、より一般的な解決策を探しています。

  numAnimalsByType([arrayOfAnimals])

だから私はこれを行うことができます:

field: numAnimalsByType([dog,cat])
field: numAnimalsByType([fish,snail])
4

1 に答える 1

0

勝負を受けて立つ!

だから私はあなたのcolumnDefsフィールド値に小さな変更を加えました:

  $scope.columnDefs = [{
    field: 'it.foo1 + it.foo2 + it.foo3',
    displayName: 'Foos'
  }, {
    field: 'it.bar1 + it.bar2',
    displayName: 'Bars'
  }, {
    field: 'it.baz1 + it.baz2',
    displayName: "Baz's"
  }];

追加の目的はit.、それを式にすることです。そのため、それらを評価できます。

<table>
  <tr>
    <th ng-repeat="column in columnDefs">{{column.displayName}}</th>
  </tr>
  <tr ng-repeat="it in entries">
    <td ng-repeat="column in columnDefs">{{$eval(column.field)}}</td>
  </tr>
</table>

それでおしまい!シンプルで機能的です。ここで動作することを確認してください。

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

それが役立つことを願っています。

于 2014-08-16T00:16:07.637 に答える