Estou definindo um filtro personalizado da seguinte forma:
<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>
Como você pode ver, o ng-repeat em que o filtro está sendo usado está aninhado em outro ng-repeat
O filtro é definido assim:
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;
};
});
Estou entendendo:
Erro: duplicatas em um repetidor não são permitidas. Repetidor: comentário em item.comments | range: 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" >
as necessidades "filtros de busca" ser antes "track por $ index"$index
variável existe em algum lugar?track by ($index + ':' + row)
para que ele irá atualizar individuais<ng-repeat>
s sempre que seus dados atualizados, bem como quando um novo elemento é adicionado, sem tropeçar em dupesPara quem espera JSON e ainda recebe o mesmo erro, analise seus dados:
fonte
Eu estava com um problema no meu projeto em que usava a faixa ng-repeat por $ index, mas os produtos não estavam refletindo quando os dados vieram do banco de dados. Meu código é como abaixo:
No código acima, product é uma diretiva separada para exibir o produto. Mas vim a saber que $ index causa problemas quando passamos os dados para fora do escopo. Portanto, as perdas de dados e o DOM não podem ser atualizados.
Encontrei a solução usando product.id como uma chave no ng-repeat, como abaixo:
Mas o código acima falha novamente e gera o erro abaixo quando mais de um produto vem com o mesmo ID:
angular.js: 11706 Erro: [ngRepeat: dupes] Duplicatas em um repetidor não são permitidas. Use a expressão 'rastrear por' para especificar chaves exclusivas. Repetidor
Então, finalmente, resolvi o problema, criando uma chave dinâmica única de repetição de ng, como abaixo:
Isso resolveu meu problema e espero que isso ajude você no futuro.
fonte
track by $index
seria melhor do quetrack by (product.id + $index)
? Por um lado,track by $index
é mais simples e, por outro, você provavelmente não tem realmente nenhuma garantia de que os valores de(product.id + $index)
serão únicos. Por exemplo, se sua matriz começar com um produto comid
5 e depois houver um produto comid
4, os valores de(product.id + $index)
ambos serão 5 (5 + 0 para o primeiro produto, 4 + 1 para o segundo) e você ainda obter as duplicatas em um repetidor não são permitidos erros.O que você pretende fazer com o filtro "intervalo"?
Aqui está uma amostra do que eu acho que você está tentando fazer: http://jsfiddle.net/evictor/hz4Ep/
HTML:
JS:
fonte
Se, por acaso, esse erro ocorrer ao trabalhar com o SharePoint 2010: Renomeie as extensões de arquivo .json e atualize o caminho restService. Nenhuma "faixa por $ index" adicional foi necessária.
Felizmente, eu fui encaminhado este link para esta lógica:
Depois que as extensões do arquivo forem alteradas, tudo estará definido.
fonte
Caso isso aconteça com outra pessoa, estou documentando isso aqui, estava recebendo esse erro porque, por engano, defino o modelo ng da mesma forma que a matriz ng-repeat:
Ao invés de:
Eu verifiquei o array e não tinha duplicatas, apenas verifique suas variáveis.
fonte
Duplicatas em um repetidor não são permitidas. Use a expressão 'rastrear por' para especificar chaves exclusivas.
Exemplo
fonte
Se você chamar ng-repeat dentro de uma tag <ul>, poderá permitir duplicatas. Veja este link para referência. Veja Todo2.html
fonte
Minha
JSON
resposta foi assim:Então, eu costumava
ng-repeat = "item in variables.items"
exibi-lo.fonte
Duplicatas em um repetidor não são permitidas. Use a expressão 'rastrear por' para especificar chaves exclusivas. Repetidor: sdetail em mydt, Chave duplicada: string:, Valor duplicado:
Portanto, esse erro também pode ocorrer quando você está buscando os dados da base de dados, cujo nome está escrito incorretamente por você.
fonte