AngularJS: Usando trackBy com filtros em um ng-repeat

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 byexpressã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, ngRepeateles 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 byexpressão. Está nos documentos do, ngRepeatmas 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