web-dev-qa-db-de.com

ng-repeat mit track by und filter and orderBy funktioniert nicht

Ich habe diesen Code.

http://jsfiddle.net/0tgL7u6e/

JavaScript

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.nameFilter = '';
    $scope.contacts = [
        {name: 'GHI'},
        {name: 'DEF'},
        {name: 'ABC'},
        {name: 'JKL'}
    ];
}

Aussicht

<div ng-controller="MyCtrl">
    <div><input type="text" ng-model="nameFilter" placeholder="Search..." /></div>
    <p ng-repeat="contact in contacts track by $index | filter: nameFilter | orderBy: name">{{ contact.name }}</p>
</div>

Ich weiß nicht, warum die Bestellung nicht funktioniert und warum der Filter nicht funktioniert.

Bei einer anderen Frage habe ich über etwas gelesen, dass Objekte nicht gefiltert oder angeordnet werden können. Ich habe aber ein Array der oben genannten Objekte. Es sollte auch funktionieren!?

Was ist das Problem?

23
PatrickB

Um die Nachverfolgung mit Filtern zu verwenden, muss die Nachverfolgung nach Ausdruck nach dem Filter hinzugefügt werden.

<p ng-repeat="contact in contacts | orderBy: 'name' | filter: nameFilter  track by $index">{{ contact.name }}</p>

Hier ist die funktionierende fiddle

54
Sajeetharan

sie müssen den Code in den folgenden ändern

<div ng-controller="MyCtrl">
    <div><input type="text" ng-model="nameFilter" placeholder="Search..." /></div>
    <p ng-repeat="contact in contacts  | orderBy: name | filter: nameFilter track by $index ">{{ contact.name }}</p>
</div>
0
Reza