【问题标题】:Can I group by multiple fields using Angular-Filter?我可以使用 Angular-Filter 按多个字段分组吗?
【发布时间】:2016-07-13 10:20:06
【问题描述】:

我正在使用Angular-FiltergroupBy 过滤器。

来自 GitHub 的示例

$scope.players = [
  {name: 'Gene', team: 'alpha'},
  {name: 'George', team: 'beta'},
  {name: 'Steve', team: 'gamma'},
  {name: 'Paula', team: 'beta'},
  {name: 'Scruath', team: 'gamma'}
];

<ul>
  <li ng-repeat="(key, value) in players | groupBy: 'team'">
    Group name: {{ key }}
    <ul>
      <li ng-repeat="player in value">
        player: {{ player.name }}
      </li>
    </ul>
  </li>
</ul>

因此,该示例按团队对球员集合进行分组。想象一下每个玩家对象都有一个 age 属性:

$scope.players = [
  {name: 'Gene', team: 'alpha', age: 19},
  {name: 'George', team: 'beta', age: 19},
  {name: 'Steve', team: 'gamma', age: 23},
  {name: 'Paula', team: 'beta', age: 23},
  {name: 'Scruath', team: 'gamma', age: 23}
];

我想按团队年龄分组。我该怎么做?

【问题讨论】:

  • 你试过添加另一个 groupBy 吗?
  • 预期结果是什么?你试过什么?似乎嵌套的 groupBy 可以满足您的需要

标签: angularjs group-by angular-filters


【解决方案1】:

尝试以下我假设您希望使用多个值作为标准来创建组

ng-repeat="(key, value) in players | groupBy: '[team,age]'"

【讨论】:

    【解决方案2】:

    以多字段为例

    angular.module('app',['angular.filter'])
      .controller('MainController', function($scope) { 
        $scope.players = [
          {name: 'Gene', team: 'alpha', age: 19},
          {name: 'George', team: 'beta', age: 19},
          {name: 'Steve', team: 'gamma', age: 23},
          {name: 'Paula', team: 'beta', age: 23},
          {name: 'Scruath', team: 'gamma', age: 23}
        ];
     });
    <!DOCTYPE html>
    <html ng-app="app">
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
      <script src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.4.7/angular-filter.js"></script>
      
    <meta name="description" content="[groupBy example]"/>
      <meta charset="utf-8">
      <title>JS Bin</title>
    </head>
    <body>
      <div ng-controller="MainController"> 
    
    <ul ng-repeat="(key, value) in players | groupBy: '[team,age]'">
      <b>Group name: {{key}}</b>
      <br>
      <li ng-repeat="player in value">
        <b>player:</b> {{ player.name }} 
        <br>
        <b>team:</b> {{player.team}} 
        <br>
        <span ng-if="player.age"><b>age:</b> {{ player.age }}</span>
      </li>
    </ul>
      </div>
    </body>
    </html>

    【讨论】:

    • 如何在 html 中分别访问多个键?关键似乎变成了一串“团队,年龄”我需要拆分吗? {{key.team}} 未定义。等
    • 回答我自己的评论:{{value[0].team}}{{value[0].age}} 可以解决问题。使用 groupby,您应该能够指望每个现有的“团队”和“年龄”(或组)至少有一行,因此无需检查 count &gt; 0。远非优雅,但它应该可以工作并且可靠。希望在使用多个字段作为键时,键会变成 json 或其他东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多