问题
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 is not working and why the filter is not working.
At another question, I've read about something that objects can't be filtered or ordered. But I have an array of the objects above. Also, it should work!?
What's the problem?
回答1:
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
回答2:
you have to change the code to the following one
<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>
来源:https://stackoverflow.com/questions/29608450/ng-repeat-with-track-by-and-filter-and-orderby-not-working