Ich möchte Tabelle mit Filtern in Tabellenheader erstellen. Filter ist eine Liste eindeutiger Werte in jeder Spalte. Hier wird vereinfacht Code:
<table>
<tr>
<th class="dropdown" ng-repeat="field in data.columns">
<span>{{field.title}}</span>
<ul class="dropdown-menu">
<li ng-repeat="item in unique(data.items, field)"><checkbox> {{item.text}}</li>
</ul>
</th>
</tr>
<tr ng-repeat="item in data.items"></tr>
</table>
I verwenden gleichen Objektarray für Filter und Filtertabelle aber erstellen Kopie des Arrays und entfernen von Werten, die Kopie wiederholt. Und hier ist mein Problem.
Wenn ich Array als array.slice(0)
kopiert löschte Werte nicht im Filter, sondern auch in der Tabelle (Array enthält Objekte). Mein Problem ist in Referenzen, so habe ich als deep jQuery.extend(true, [], array)
und Winkel wirft Fehler:
[$rootScope:infdig] 10 $digest() iterations reached. Aborting! Watchers fired in the last 5 iterations
Meine Daten sehen wie folgt aus:
[{id: 1, title: 'AAA', something: [{id: 1, text: "A"}]}, {id: 2, title: 'AAAA', something: [{id: 2, text: "AA"}]}]
Problem ist in Eigentum etwas (array.slice(0)
DonT kopieren und $ .extend Kopie, aber Winkel get Fehler)
Vielen Dank für Ratschläge
'angular.copy()' die Winkel Art und Weise. – Jai
Ich denke, Ihr Problem wird verschwinden, wenn Sie einige der Logik der Manipulation der Arrays auf Ihren Controller verschieben. Versuchen Sie, den Aufruf an unique (data.items, field) zu einer Controller-Funktion zu verschieben. Wenn Sie eine der ng-Wiederholungen reduzieren können, reduziert dies die Anzahl der Digest-Zyklen erheblich. – Matt
Ein anderer winkliger Ansatz könnte die Verwendung von $ filter ('filter') oder das Erstellen eines benutzerdefinierten Filters für die ng-Wiederholung sein. – Matt