2016-05-11 18 views
0

Ich habe eine ng-Wiederholung, die wie folgt aussieht:Ändern Sammlung in jeder Iteration von ngRepeat

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

getItemsForDay(day) gibt ein $firebaseArray, die abgefragt und gefiltert werden mit den richtigen Daten. Ursprünglich hat die $firebaseArray eine Liste aller Elemente für alle Tage. Aber ich filtere es jedes Mal, wenn ich die Methode anrufe.

Dies führt zu

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

Wie kann ich die dynamisch ändern $firebaseArray so kann ich durch die korrekten Daten durchlaufen?

Antwort

1

Ich würde vorschlagen, den $filter Service zu verwenden. Wenn das $ firebaseArray eine bestimmte Eigenschaft hat, dass Sie versuchen, nach dem gefiltert werden Sie es einfach mit dem folgenden Aktionen durchführen:

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

Sehen Sie diese plnkr für eine tiefergehende Beispiel.

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> 

Wenn Sie nicht einfach auf Eigenschaften entsprechen können, dann können Sie immer Ihre eigenen Filter bauen ... hier ist ein good example, wie das zu tun.

+0

Ja! Das Filtern des $ firebaseArray funktionierte perfekt. Vielen Dank! – Sunny

+0

Großartig! Froh, dass ich Helfen kann. – sourdoughdetzel

Verwandte Themen