Работает ли orderBy с опережением AngularUI?

Этот вопрос связан с другим вопросом, который я задал.

Мне удалось заставить работать AngularUI Typeahead. Однако мой фильтр orderBy ничего не делает.

Это поле выбора упорядочивает все правильно (расстояние является пользовательской функцией):

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

Но этот тип впереди:

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

вообще не меняет порядок (т. е. остается отсортированным по алфавиту). Чего я хотел бы добиться, так это того, что когда пользователь вводит первую букву - в данном случае - железнодорожной станции, ближайшая к нему станция, содержащая эту букву, будет отображаться первой. Возможно ли это сделать или эта функция недоступна (пока)?


person Ben    schedule 01.03.2014    source источник


Ответы (1)


Трудно быть на 100% уверенным, не видя минимального сценария воспроизведения (поэтому всегда полезно включать живой минимальный пример с использованием http://plnkr.co/ или аналогичный), но, глядя на ваш HTML-код, я думаю, что проблема в порядке применения фильтров.

Если вы сначала примените фильтр limitTo, он просто отрезает первые 8 результатов из несортированного массива, и только затем отсортирует набор отсечения. Попробуйте изменить порядок фильтров orderBy и limitTo следующим образом:

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

чтобы увидеть, поможет ли это, а если нет, опубликуйте минимальный сценарий воспроизведения с помощью plunker.

person pkozlowski.opensource    schedule 01.03.2014
comment
Это действительно работает, спасибо. С этого момента я буду включать минимальный пример. - person Ben; 01.03.2014