14

Mam ten kod.ng-repeat ze śledzeniem i filtrowaniem i zamówieniem Nie działa

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

Zobacz

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

Nie wiem, dlaczego tak nie działa i dlaczego filtr nie działa.

Przy innym pytaniu przeczytałem o czymś, że obiektów nie można filtrować ani sortować. Ale mam tablicę powyższych obiektów. Powinno też działać !?

Na czym polega problem?

Odpowiedz

41

Aby używać śledzenia z filtrami, ścieżka po wyrażeniu musi zostać dodana po filtrze.

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

Oto pracuje fiddle

+1

to prawda Jeśli używasz śledzenia jak wspomniano. –

+1

Nie! : D To nie może być takie proste? Ale działa: D Dziękuję bardzo! – PatrickB

+1

Ze wszystkich podobnych pytań jest to najbardziej trafna odpowiedź! –

0

trzeba zmienić kod na następujący jednej

<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

to nie ma znaczenia. zarówno praca – Reza

+4

** ma ** znaczenie. Bez cudzysłowów będzie szukał treści '$ scope.name', która nie istnieje. Jsfiddle Twojej wersji: https://jsfiddle.net/saw1uLs9/ – naeramarth7