Definiuję niestandardowy filtr tak:
<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>
Jak widać, powtórzenie ng, w którym używany jest filtr, jest zagnieżdżone w innym powtórzeniu ng
Filtr jest zdefiniowany w następujący sposób:
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;
};
});
Dostaję:
Błąd: duplikaty w repeaterze są niedozwolone. Repeater: komentarz w item.comments | zakres: 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" >
„filtr wyszukiwania” musi być wcześniejszy niż „śledź według indeksu $”$index
zmienna istnieje gdzieś?track by ($index + ':' + row)
tej opcji, aby aktualizować poszczególne<ng-repeat>
s przy każdej aktualizacji danych, a także po dodaniu nowego elementu, bez potykania się o duplikatyDla tych, którzy oczekują JSON i nadal pojawia się ten sam błąd, upewnij się, że parsujesz swoje dane:
źródło
Miałem problem w moim projekcie, w którym korzystałem ze śledzenia powtórzeń ng według $ index, ale produkty nie były odzwierciedlane, gdy dane pochodziły z bazy danych. Mój kod jest jak poniżej:
W powyższym kodzie produkt jest osobną dyrektywą do wyświetlania produktu, ale dowiedziałem się, że $ index powoduje problem, gdy przekazujemy dane z zakresu. Dlatego utrata danych i DOM nie mogą być aktualizowane.
Znalazłem rozwiązanie, używając product.id jako klucza w powtórzeniu ng, jak poniżej:
Ale powyższy kod ponownie nie powiedzie się i zgłasza poniższy błąd, gdy więcej niż jeden produkt ma ten sam identyfikator:
angular.js: 11706 Błąd: [ngRepeat: dupes] Duplikaty w repeaterze są niedozwolone. Użyj wyrażenia „śledź według”, aby określić unikalne klucze. Przekaźnik
W końcu rozwiązałem problem, tworząc dynamiczny unikalny klucz powtórzenia ng, jak poniżej:
To rozwiązało mój problem i mam nadzieję, że pomoże ci to w przyszłości.
źródło
track by $index
byłoby lepiej niżtrack by (product.id + $index)
? Z jednej stronytrack by $index
jest prostsze, a z drugiej strony prawdopodobnie nie masz żadnej gwarancji, że wartości(product.id + $index)
będą unikalne. Na przykład, jeśli twoja tablica zaczyna się od produktu zid
5, a potem jest produkt zid
4, ich wartości(product.id + $index)
będą wynosić 5 (5 + 0 dla pierwszego produktu, 4 + 1 dla drugiego), a ty nadal uzyskać duplikaty w repeaterze nie są dozwolone błąd.Co zamierzasz zrobić z filtrem „zasięgu”?
Oto działająca próbka tego, co myślę, że próbujesz zrobić: http://jsfiddle.net/evictor/hz4Ep/
HTML:
JS:
źródło
Jeśli przez przypadek ten błąd wystąpi podczas pracy z programem SharePoint 2010: Zmień nazwy rozszerzeń plików .json i zaktualizuj ścieżkę restService. Nie było wymagane dodatkowe „śledzenie według $ index”.
Na szczęście przekazano mi ten link do tego uzasadnienia:
Po zmianie rozszerzeń plików należy wszystko ustawić.
źródło
Na wypadek, gdyby stało się to komuś innemu, dokumentuję to tutaj, otrzymywałem ten błąd, ponieważ przez pomyłkę ustawiłem model ng tak samo jak tablicę ng-repeat:
Zamiast:
Sprawdziłem tablicę i nie miałem żadnych duplikatów, po prostu dwukrotnie sprawdź zmienne.
źródło
Duplikaty w repeaterze nie są dozwolone. Użyj wyrażenia „śledź według”, aby określić unikalne klucze.
Przykład
źródło
Jeśli wywołasz powtórzenie ng w tagu <ul>, możesz zezwolić na duplikaty. Zobacz ten link w celach informacyjnych. Zobacz Todo2.html
źródło
Moja
JSON
odpowiedź była taka:Więc kiedyś
ng-repeat = "item in variables.items"
to wyświetlałem.źródło
Duplikaty w repeaterze nie są dozwolone. Użyj wyrażenia „śledź według”, aby określić unikalne klucze. Repeater: sdetail in mydt, Duplikat klucza: string:, Duplikat wartości:
Ten błąd może więc wystąpić również podczas pobierania danych z bazy danych, której nazwa została wpisana przez Ciebie niepoprawnie.
źródło