在ngRepeat的每次迭代中更改集合

时间:2016-05-11 01:51:01

标签: angularjs firebase

我有一个看似如下的ng-repeat:

<div ng-repeat="day in days">
    <div ng-repeat="item in getItemsForDay(day)">

getItemsForDay(day)返回$firebaseArray,查询并使用正确的数据进行过滤。最初$firebaseArray列出了所有日子里的所有项目。但是每次调用方法时我都会过滤掉它。

这导致

Error: $rootScope:infdig Infinite $digest Loop. 
10 $digest() iterations reached. Aborting!

如何动态更改$firebaseArray以便我可以遍历正确的数据?

1 个答案:

答案 0 :(得分:1)

我建议使用$filter服务。如果$ firebaseArray具有您尝试过滤的特定属性,则只需使用以下命令即可:

<div ng-repeat="day in days">
    <div ng-repeat="item in $firebaseArray | filter:{matchingProperty: day}:true"></div>
</div>

有关更深入的示例,请参阅此plnkr

<强> JS

app.controller('MainCtrl', function($scope) {
  $scope.days = [1,2,3,4,5,6,7];
  $scope.stuff = [{day: 1}, {day: 1}, {day: 2}, {day: 2}, {day: 3}, {day: 3}, {day: 4}, {day: 5}, {day: 6}, {day: 7}];
});

<强> HTML

<div ng-repeat="day in days">
      Day {{$index+1}} Matches:
      <div ng-repeat="s in stuff | filter:{day: day}:true">
        {{s.day}}
      </div>
    </div>

如果您无法简单地匹配属性,那么您始终可以构建自己的过滤器...这里有good example如何做到这一点。