AngularJS 'ng-filtre" est très lent sur le tableau de ~1000 éléments

J'ai un simple <input> filtre de recherche mis en place pour une liste de itemnames dans AngularJS.

Ma liste ressemble à ceci:

var uniqueLists = {
    category1: ['item1', 'item2', 'item3' ... 'item180' ], //Real list contains ~180 items
    category2: ['itemA', 'itemB', 'itemC' ... 'itemZZZ' ], //Real list contains ~1080 items
    category3: ['otheritem1', 'otheritem2', 'otheritem3' ]  //Real list contains 6 items
  }

Je itérer sur cette liste Angulaire et d'imprimer les résultats dans un <ul> pour chaque catégorie.

<div ng-repeat="(key,val) in uniqueLists">
    <form ng-model="uniqueLists[index][0]">
        <input ng-model="searchFilter" type="text" />
            <ul>
                <li ng-repeat="value in val | filter: searchFilter">
                    <label>
                         <input type="checkbox" ng-model="selectedData[key][value]" />
                        {{value}}
                    </label>
                </li>
            </ul>
    </form>
</div>

Pour plus de clarté, selectedData ressemble à ceci:

var selectedData = {category1: [item1:true], category2: [], category3: []); //if 'item1's checkbox is checked.

Cette liste est fonctionne très bien, bien que la filter est assez lag, même sur mon très-rapide de l'ordinateur. Taper une lettre dans l'entrée dure 1 à 2 secondes pour que la liste soit mise à jour.

Je suis conscient que c'est probablement parce que je suis le filtrage par environ 1000 éléments à la fois, mais je n'ai pas vu de discussion de cet ailleurs.

Est-il possible d'obtenir de meilleures performances du filtre?

  • Un jsfiddle avec votre code allez vraiment vous aider dans ce cas. Aussi j'imagine que le fait d'avoir une boucle dans une boucle, puis le filtre est tout à fait bien, u avez également la création d'une forme à l'intérieur de la première boucle. Un jsffidle allons vraiment nous aider à vous aider 😉
InformationsquelleAutor JVG | 2013-07-31