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.