javascript - Angular 过滤器 ng-repeat 到单独的列表中

标签 javascript angularjs

我有一个已展平的对象,用于(仅)检索我正在重复运行的特定项目。我想知道是否可以让重复者将这些项目分成小组。

每个项目都有一个类别键,我只想将它们放入按类似类别分组的 html 中。

我可以做这样的事情 -

<div ng-repeat="item in myObject | category1">{{name}}</div>
<div ng-repeat="item in myObject | category2">{{name}}</div> 
<div ng-repeat="item in myObject | category3">{{name}}</div>

然而,对象中有 15 个左右的类别和大约 80-100 个项目,所以我想知道是否有某种方法可以编写几行并让 Angular 处理分布,而不是“硬编码”每个类别。另外 - 类别稍后可能会更改,如果开发人员不必介入并更改硬编码类别,那就太好了。

作为引用,该对象看起来像这样 -

  $scope.myObject = [{'name' : item1' , 'category' : 'category1'},{'name' : item2' , 'category' : 'category2'}];

我的第一个猜测是通过某种过滤来运行对象,该过滤会输出要重复的类别数组,然后在该重复中,通过重复中的当前项目过滤原始对象 -

  //categories is myObject filtered down to an array of categories (1 of each)
  <div ng-repeat="category in categories">
       <div ng-repeat="item in myObject | category">
             {{item.name}}
       </div>
 </div>

我想知道是否有更好或更优雅的方法来处理这个问题?感谢您的阅读!

最佳答案

如果您使用像 lodash 这样的库,这真的很容易:

在你的 Controller 中:

$scope.myObjGrouped= _.groupBy($scope.myObject, 'category');

在 HTML 中:

  <div ng-repeat="(category, objects) in myObjGrouped">
       <div ng-repeat="item in objects">
             {{item.name}}
       </div>
 </div>

关于javascript - Angular 过滤器 ng-repeat 到单独的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238289/

相关文章:

javascript - 用于隐藏基于 HTML5 数据标签的元素的 jQuery 函数未在 Click 上运行

javascript - 使用javascript在mongodb中存储日期

angularjs - 我如何在templateURL中使用Angular JS使用Laravel局部 View

javascript - 如何在 AngularJS Controller 内定义普通的 JavaScript 函数

javascript - JSON.parse Reviver 函数中出现意外行为,删除对象而不是关键属性

javascript - 如何在错误时触发ajax请求?

javascript - 在 KnockoutJS 中向列表项添加 onclick 事件。

随机执行 POST 请求的 Angularjs 服务被取消

binding - AngularJS如何绑定(bind) map

javascript - 如何为这个$resource工厂使用restful而不是查询语法?