14

Ho questo codice.ng-repeat con track by e filter e orderBy not working

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'} 
    ]; 
} 

View

<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> 

Non so il motivo per cui l'ordine non funziona e perché il filtro non funziona.

In un'altra domanda, ho letto su qualcosa che gli oggetti non possono essere filtrati o ordinati. Ma ho una matrice degli oggetti sopra. Inoltre, dovrebbe funzionare !?

Qual è il problema?

risposta

41

Per utilizzare il tracciamento con i filtri, la traccia per espressione deve essere aggiunta dopo il filtro.

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

Ecco il lavoro fiddle

+1

Questo è corretto Se utilizzi il monitoraggio come detto. –

+1

No! : D Non può essere così facile? Ma funziona: D Grazie mille! – PatrickB

+1

Di tutte le domande simili, questa è la risposta più adatta! –

0

è necessario modificare il codice al successivo

<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

'orderBy: 'name'' – naeramarth7

+1

non importa. entrambi funzionano – Reza

+4

È ** importante. Senza le virgolette, cercherà il contenuto di '$ scope.name' che non esiste. Un jsfiddle della tua versione: https://jsfiddle.net/saw1uLs9/ – naeramarth7