Desde a versão 1.1.4, é considerado um erro ter dois itens idênticos em uma coleção que é alimentada no repetidor. Portanto, o código a seguir lançará uma exceção:
<ul>
<li ng-repeat="item in [1, 2, 3, 3]">
{{ item }}
</li>
</ul>
Isso porque a nova track by
expressão foi introduzida para itens de rastreamento personalizados. Para consertar nosso código, poderíamos usá-lo assim:
<ul>
<li ng-repeat="item in [1, 2, 3, 3] track by $index">
{{ item }}
</li>
</ul>
O fato é que, assim que você tentar adicionar filtros ao seu, ngRepeat
eles não funcionarão:
<input type="text" ng-model="searchText">
<ul>
<li ng-repeat="item in [1, 2, 3, 3] track by $index | filter:searchText">
{{ item }}
</li>
</ul>
Isso porque os filtros devem ser aplicados antes da track by
expressão. Está nos documentos do, ngRepeat
mas como causa muita confusão para os iniciantes, vale a pena lembrar disso. O código de trabalho seria assim:
<input type="text" ng-model="searchText">
<ul>
<li ng-repeat="item in [1, 2, 3, 3] | filter:searchText track by $index">
{{ item }}
</li>
</ul>
Você pode brincar com esses exemplos de código neste plunker