This question is related to another question I asked.

I have managed to get AngularUI Typeahead to work. However, my orderBy filter does not appear to do anything.

This select box orders everything correctly (distance is a custom function):

<select ng-model="fromStation"
ng-options="item.name for item in stations.station | orderBy:distance">

But this typeahead:

<input type="text" ng-model="fromStation" 
typeahead="item as item.name for item in stations.station 
| filter:$viewValue | limitTo:8 | orderBy:distance">

doesn't change the order at all (i.e. it remains sorted alphabetically). What I would like to achieve is that when a user types the first letter of a - in this case - train station, the station closest to him containing that letter would appear first. Is it possible to make this work or is this feature not available (yet)?

有帮助吗?

解决方案

It is hard to be 100% sure without seeing a minimal reproduce scenario (this is why it is always a good idea to include live, minimal example using http://plnkr.co/ or similar) but looking at your HTML code I think that the problem is in the order of applying filters.

If you apply the limitTo filter first it will just cut off first 8 results from an un-sorted array and only then will sort the cut off set. Try revert the order of the orderBy and the limitTo filters like so:

<input type="text" ng-model="fromStation" typeahead="item as item.name for item in stations.station | filter:$viewValue | orderBy:distance | limitTo:8">

to see if this does the trick and if not - post a minimal reproduce scenario using plunker.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top