Ich definiere einen benutzerdefinierten Filter wie folgt:
<div class="idea item" ng-repeat="item in items" isoatom>
<div class="section comment clearfix" ng-repeat="comment in item.comments | range:1:2">
....
</div>
</div>
Wie Sie sehen können, ist die ng-Wiederholung, in der der Filter verwendet wird, in einer anderen ng-Wiederholung verschachtelt
Der Filter ist wie folgt definiert:
myapp.filter('range', function() {
return function(input, min, max) {
min = parseInt(min); //Make string input int
max = parseInt(max);
for (var i=min; i<max; i++)
input.push(i);
return input;
};
});
Ich erhalte:
Fehler: Duplikate in einem Repeater sind nicht zulässig. Repeater: Kommentar in item.comments | Bereich: 1: 2 ngRepeatAction @ https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/an
<div ng-repeat="row in [1,1,1,2,2] |filter: 2 track by $index" >
Der "Suchfilter" muss vor "Track by $ Index" stehen$index
Variable irgendwo?track by ($index + ':' + row)
damit es einzelne<ng-repeat>
s aktualisiert, wenn seine Daten aktualisiert werden, sowie wenn ein neues Element hinzugefügt wird, ohne überStellen Sie für diejenigen, die JSON erwarten und dennoch denselben Fehler erhalten, sicher, dass Sie Ihre Daten analysieren:
quelle
Ich hatte ein Problem in meinem Projekt, bei dem ich ng-repeat track by $ index verwendete, aber die Produkte wurden nicht reflektiert, wenn Daten aus der Datenbank stammen. Mein Code ist wie folgt:
Im obigen Code ist product eine separate Anweisung zum Anzeigen des Produkts. Aber ich habe erfahren, dass $ index Probleme verursacht, wenn wir Daten aus dem Bereich herausgeben. Daher können die Datenverluste und das DOM nicht aktualisiert werden.
Ich habe die Lösung gefunden, indem ich product.id als Schlüssel für ng-repeat wie folgt verwendet habe:
Der obige Code schlägt jedoch erneut fehl und löst den folgenden Fehler aus, wenn mehr als ein Produkt dieselbe ID hat:
angle.js: 11706 Fehler: [ngRepeat: dupes] Duplikate in einem Repeater sind nicht zulässig. Verwenden Sie den Ausdruck 'track by', um eindeutige Schlüssel anzugeben. Verstärker
Schließlich habe ich das Problem gelöst, indem ich den dynamischen eindeutigen Schlüssel für ng-repeat wie folgt erstellt habe:
Dies hat mein Problem gelöst und hoffe, dass dies Ihnen in Zukunft helfen wird.
quelle
track by $index
doch besser alstrack by (product.id + $index)
? Zum einentrack by $index
ist es einfacher und zum anderen haben Sie wahrscheinlich keine Garantie dafür, dass die Werte von(product.id + $index)
eindeutig sind. Wenn Ihr Array beispielsweise mit einem Produkt mitid
5 beginnt und danach ein Produkt mitid
4, sind die Werte von(product.id + $index)
5 (5 + 0 für das erste Produkt, 4 + 1 für das zweite) und Sie Immer noch erhalten die Duplikate in einem Repeater Fehler nicht erlaubt .Was beabsichtigen Sie mit Ihrem "Bereichs" -Filter zu tun?
Hier ist ein funktionierendes Beispiel dessen, was Sie meiner Meinung nach versuchen: http://jsfiddle.net/evictor/hz4Ep/
HTML:
JS:
quelle
Wenn dieser Fehler zufällig bei der Arbeit mit SharePoint 2010 auftritt: Benennen Sie Ihre .json-Dateierweiterungen um und aktualisieren Sie Ihren restService-Pfad. Es war kein zusätzlicher "Track by $ Index" erforderlich.
Zum Glück wurde mir dieser Link zu dieser Begründung weitergeleitet:
Sobald die Dateierweiterungen geändert wurden, sollten alle festgelegt werden.
quelle
Nur für den Fall, dass dies jemand anderem passiert, ich dokumentiere dies hier. Ich habe diesen Fehler erhalten, weil ich das ng-Modell fälschlicherweise genauso eingestellt habe wie das ng-repeat-Array:
Anstatt:
Ich habe das Array überprüft und hatte keine Duplikate. Überprüfen Sie einfach Ihre Variablen.
quelle
Duplikate in einem Repeater sind nicht zulässig. Verwenden Sie den Ausdruck 'track by', um eindeutige Schlüssel anzugeben.
Beispiel
quelle
Wenn Sie eine ng-Wiederholung innerhalb eines ul-Tags aufrufen, können Sie möglicherweise Duplikate zulassen. Siehe diesen Link als Referenz. Siehe Todo2.html
quelle
Meine
JSON
Antwort war wie folgt:Also habe ich es immer
ng-repeat = "item in variables.items"
angezeigt.quelle
Duplikate in einem Repeater sind nicht zulässig. Verwenden Sie den Ausdruck 'track by', um eindeutige Schlüssel anzugeben. Repeater: sdetail in mydt, Duplicate key: string :, Duplicate value:
Daher kann dieser Fehler auch auftreten, wenn Sie die Daten aus der Datenbankbasis abrufen, deren Name von Ihnen falsch geschrieben wurde.
quelle