PatrickB PatrickB - 4 months ago 58
AngularJS Question

ng-repeat with track by and filter and orderBy not working

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


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>


I don't know why the order not working and why the filter is not working.

At another question i've readed about something that objects can't be filtered or ordered. But i have an array with the objects above. Also it should work!?

Whats the problem?

Thanks in Advance!

Answer

To use tracking with filters, the track by expression has to be added after the filter.

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

Here is the working fiddle