折叠使用 Angular js ng-repeat 和过滤器创建的 div

Posted

技术标签:

【中文标题】折叠使用 Angular js ng-repeat 和过滤器创建的 div【英文标题】:Collapse divs created with angular js ng-repeat and filter 【发布时间】:2016-07-23 09:34:09 【问题描述】:

我正在尝试实现如下图所示的目标。这是我的数据

$scope.Reports = 
[
 Id: 1, Name: 'Report One', Year: 2016, Month: 5 ,
 Id: 2, Name: 'Report Core', Year: 2016, Month: 5 ,
 Id: 3, Name: 'Report Alpha', Year: 2016, Month: 3 ,
 Id: 4, Name: 'Report Moon', Year: 2015, Month: 5 ,
 Id: 5, Name: 'Report Sky', Year: 2015, Month: 2 
];

目标是,如果您单击任何数字下划线,则属于该月的报告会隐藏或显示(可折叠)。我已经尝试了很多东西,但似乎我无法弄清楚我需要什么。我在我的代码所在的位置制作了一个 JS BIN。

http://jsbin.com/huhabehoju/edit?html,js,output 

任何帮助将不胜感激。谢谢

<body>
<div ng-controller="MainController"> 
<ul ng-repeat="(key, value) in Reports | groupBy: 'Year'">
 key 
<ul ng-repeat="(key1, value1) in value | groupBy: 'Month'">
Okey1 
<li ng-repeat="p in value1">
p.Name  
</li>
</ul>
</ul>
</div>
</body>

【问题讨论】:

【参考方案1】:

这行得通

    $scope.showReport = ;
      $scope.toggleShow = function (ym) 

       $scope.showReport[ym] = !$scope.showReport[ym];
     ;
 ); 

在控制器中 和 html 这个

    <ul ng-repeat="(key, value) in Reports | groupBy: 'Year'">
       key 
      <ul ng-repeat="(key1, value1) in value | groupBy: 'Month'">
    <a ng-click="toggleShow(key+key1)"> Okey1 </a>
  <li ng-repeat="p in value1" ng-if="!showReport[key+key1]">
    p.Name  
  </li>
</ul>
</ul>

【讨论】:

是否可以在启动时保持它们隐藏并在它们单击一个月后显示它们? 是的。只需删除 ng-if 中的 ! ,使其变为 ng-if="showReport[key+key1]"

以上是关于折叠使用 Angular js ng-repeat 和过滤器创建的 div的主要内容,如果未能解决你的问题,请参考以下文章

angular.js > 如何在视图中获取内部 JSON 数据(使用 ng-repeat 指令)

angular.js ng-repeat 用于创建网格

Angular.js ng-repeat 跨越多个 tr

Angular.js ng-repeat 跨多个元素

Angular.js - ng-repeat 不显示更新的数组

ng-repeat中的Angular js条件类