487 Stimmen

Angular ng-Wiederholung Fehler "Wiederholungen in einem Repeater sind nicht erlaubt."

Ich definiere einen benutzerdefinierten Filter folgendermaßen:

        ....

Wie Sie sehen können, ist das ng-repeat, in dem der Filter verwendet wird, in ein anderes ng-repeat verschachtelt.

Der Filter ist wie folgt definiert:

myapp.filter('range', function() {
    return function(input, min, max) {
        min = parseInt(min); //Mach den String-Eingang int
        max = parseInt(max);
        for (var i=min; i

`

Ich bekomme:

Fehler: Duplikate in einem Repeater sind nicht erlaubt. Repeater: comment in item.comments | range:1:2 ngRepeatAction@https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/an

`

973voto

Ben Punkte 58046

Die Lösung wird tatsächlich hier beschrieben: http://www.anujgakhar.com/2013/06/15/duplicates-in-a-repeater-are-not-allowed-in-angularjs/

AngularJS erlaubt keine Duplikate in einer ng-repeat Direktive. Das bedeutet, wenn Sie versuchen, Folgendes zu tun, erhalten Sie einen Fehler.

// Dieser Code wirft den Fehler "Duplikate in einem Repeater sind nicht erlaubt.
// Repeater: row in [1,1,1] key: number:1"

Änderung des obigen Codes leicht, um einen Index zu definieren, um die Eindeutigkeit zu bestimmen, wie unten gezeigt, wird es wieder funktionieren lassen.

// Das wird funktionieren

Offizielle Dokumentation finden Sie hier: https://docs.angularjs.org/error/ngRepeat/dupes

47voto

usefulBee Punkte 8632

Für diejenigen, die JSON erwarten und immer noch den gleichen Fehler erhalten, stellen Sie sicher, dass Sie Ihre Daten analysieren:

$scope.customers = JSON.parse(data)

12voto

Mahima Agrawal Punkte 1215

Ich hatte ein Problem in meinem Projekt, bei dem ich ng-repeat track by $index verwendet habe, aber die Produkte wurden nicht reflektiert, wenn die Daten aus der Datenbank kamen. Mein Code sieht wie folgt aus:

In dem obigen Code ist product eine separate Direktive zur Anzeige des Produkts. Aber ich habe festgestellt, dass $index ein Problem verursacht, wenn Daten aus dem Scope übergeben werden. Daher gehen die Daten verloren und der DOM kann nicht aktualisiert werden.

Ich habe die Lösung gefunden, indem ich product.id als Schlüssel in ng-repeat wie folgt verwendet habe:

Aber der obige Code scheitert erneut und wirft den folgenden Fehler aus, wenn mehr als ein Produkt mit derselben ID vorhanden ist:

angular.js:11706 Fehler: [ngRepeat:dupes] Duplikate in einem Wiederholer sind nicht erlaubt. Verwenden Sie den Ausdruck 'track by', um eindeutige Schlüssel anzugeben. Wiederholer

Also habe ich das Problem schließlich gelöst, indem ich einen dynamischen eindeutigen Schlüssel für ng-repeat wie folgt erstellt habe:

Dies hat mein Problem gelöst und ich hoffe, es wird Ihnen in Zukunft helfen.

6voto

Ezekiel Victor Punkte 3868

Was soll Ihr "Bereichs" -Filter tun?

Hier ist ein funktionierendes Beispiel dessen, was ich denke, dass Sie versuchen zu tun: http://jsfiddle.net/evictor/hz4Ep/

HTML:

    Artikel {{$index}}

      Kommentar {{$index}}
      {{comment}}

JS:

angular.module('manyminds', [], function() {}).filter('range', function() {
    return function(input, min, max) {
        var range = [];
        min = parseInt(min); //Mache String-Eingabe int
        max = parseInt(max);
        for (var i=min; i<=max; i++)
            input[i] && range.push(input[i]);
        return range;
    };
});

function MainCtrl($scope)
{
    $scope.items = [
        {
            comments: [
                'Kommentar 0 in Artikel 0',
                'Kommentar 1 in Artikel 0'
            ]
        },
        {
            comments: [
                'Kommentar 0 in Artikel 1',
                'Kommentar 1 in Artikel 1',
                'Kommentar 2 in Artikel 1',
                'Kommentar 3 in Artikel 1'
            ]
        }
    ];
}

1voto

CR Rollyson Punkte 1401

Wenn dieser Fehler zufällig auftritt, während Sie mit SharePoint 2010 arbeiten: Benennen Sie Ihre .json Dateierweiterungen um und stellen Sie sicher, dass Sie Ihren restService-Pfad aktualisieren. Es wurde kein zusätzliches "track by $index" benötigt.

Zum Glück wurde mir dieser Link zu dieser Begründung weitergeleitet:

.json wird ein wichtiger Dateityp in SP2010. SP2010 enthält bestimmte Webservice-Endpunkte. Der Speicherort dieser Dateien ist der isapi-Ordner in 14hive. Die Erweiterung dieser Dateien ist .json. Das ist der Grund, warum es einen solchen Fehler gibt.

"Es ist nur wichtig, dass der Inhalt einer json Datei json ist - nicht ihre Dateierweiterung"

Sobald die Dateierweiterungen geändert sind, sollte alles in Ordnung sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X