Я определяю пользовательский фильтр следующим образом:
<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>
Как вы можете видеть, ng-repeat, где используется фильтр, вложен в другой ng-repeat
Фильтр определяется так:
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;
};
});
Я получаю:
Ошибка: дубликаты в повторителе не допускаются. Повторитель: комментарий в item.comments | диапазон: 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" >
«фильтр поиска» должен быть до «отслеживания по $ index»$index
существует ли переменная где-то?track by ($index + ':' + row)
его так, чтобы он обновлял отдельные<ng-repeat>
s всякий раз, когда обновляются его данные, а также когда добавляется новый элемент, без отключенияДля тех, кто ожидает JSON и все еще получает ту же ошибку, убедитесь, что вы анализируете свои данные:
источник
У меня возникла проблема в моем проекте, когда я использовал трек ng-repeat по $ index, но продукты не отражали данные, поступающие из базы данных. Мой код, как показано ниже:
В приведенном выше коде product - это отдельная директива для отображения продукта. Но я узнал, что $ index вызывает проблему, когда мы передаем данные из области. Таким образом, потери данных и DOM не могут быть обновлены.
Я нашел решение, используя product.id в качестве ключа в ng-repeat, как показано ниже:
Но приведенный выше код снова дает сбой и выдает приведенную ниже ошибку, когда более одного продукта поставляется с одинаковым идентификатором:
angular.js: 11706 Ошибка: [ngRepeat: dupes] Дубликаты в повторителе не допускаются. Используйте выражение «track by» для указания уникальных ключей. повторитель
Наконец, я решил проблему, создав динамический уникальный ключ ng-repeat, как показано ниже:
Это решило мою проблему и надеюсь, что это поможет вам в будущем.
источник
track by $index
, будет лучше, чемtrack by (product.id + $index)
? С одной стороны,track by $index
это проще, а с другой, у вас, вероятно, нет никакой гарантии, что значения(product.id + $index)
будут уникальными. Например, если ваш массив начинается с продукта сid
5, а после этого есть продукт сid
4, их значения(product.id + $index)
будут равны 5 (5 + 0 для первого продукта, 4 + 1 для второго), и вы будете все равно получить дубликаты в повторителе не допускается ошибка.Что вы собираетесь делать с вашим «диапазонным» фильтром?
Вот рабочий пример того, что я думаю, вы пытаетесь сделать: http://jsfiddle.net/evictor/hz4Ep/
HTML:
JS:
источник
Если случайно эта ошибка возникает при работе с SharePoint 2010: переименуйте ваши расширения файлов .json и обязательно обновите ваш путь restService. Никаких дополнительных «track by $ index» не требуется.
К счастью, я был перенаправлен по следующей ссылке :
После изменения расширений файлов все должно быть установлено.
источник
На случай, если это случится с кем-то другим, я документирую это здесь, я получаю эту ошибку, потому что я по ошибке установил ng-модель так же, как массив ng-repeat:
Вместо:
Я проверил массив и не имел дубликатов, просто дважды проверьте ваши переменные.
источник
Дубликаты в повторителе не допускаются. Используйте выражение «track by» для указания уникальных ключей.
пример
источник
Если вы вызываете ng-repeat в теге <ul>, вы можете разрешить дублирование. Смотрите эту ссылку для справки. Смотрите Todo2.html
источник
Мой
JSON
ответ был таким:Итак, я использовал его
ng-repeat = "item in variables.items"
для отображения.источник
Дубликаты в повторителе не допускаются. Используйте выражение «track by» для указания уникальных ключей. Повторитель: sdetail в mydt, Дубликат ключа: строка:, Дубликат значения:
Так что эта ошибка также может возникать, когда вы выбираете данные из базы данных, чье имя написано неверно вами.
источник