【问题标题】:ng-grid tally multiple columnsng-grid 统计多列
【发布时间】:2014-08-18 22:33:11
【问题描述】:

我的数据包含的字段比我的页面包含的列多。我需要将字段汇总到列中。

我拥有的 JSON:

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

我想要的网格:

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.
}

[ EDIT ]我添加了一个示例 plunker,其中包含我未修改的网格,以及我想要拥有的描述:

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

我不想看到猫或狗或其他动物,我想看到某些类型的总和。 这些列比我展示的要多,所以我正在寻找一个更通用的解决方案,比如

  numAnimalsByType([arrayOfAnimals])

所以我可以这样做:

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

【问题讨论】:

  • 关心发布您的网格 html 吗?更好的是,制作一个小提琴来显示您的问题。
  • 好的。我已经修改了帖子以包含一个 plunker。

标签: angularjs ng-grid celltemplate


【解决方案1】:

接受挑战!

所以我只是对您的 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

希望对您有所帮助。

【讨论】:

  • 谢谢。虽然我用的是ng-grid,所以没有HTML可以修改,都是插件生成的。我得修改源代码。
  • 在这种情况下,除了将您的数组转换为一个新的数组外,我认为别无选择,所有的计算都已经完成,放在一个更简单的数组中并绑定到它。
  • 好的,我会去的。在渲染之前,我只需制作并添加我需要的新字段。报告.landlife = report.cats + report.dogs; field: 'landlife' 也许有人会想出更优雅的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多