Ограничение Angular UI-Bootstrap Typeahead определенным свойством объекта

У меня есть следующий Angular UI-Bootstrap typeahead отлично работает:

<input class="span2" type="text" ng-model="selectedStuff" typeahead="stuff as stuff.name for stuff in stuffs | filter:$viewValue"/>

Тем не менее, он работает почти слишком отлично. Я могу отобразить stuffs.name для целей typeahead И выбрать полный объект stuff в stuffs. Проблема в том, что мой $viewValue соответствует всем свойствам в stuff, а не только stuff.name. Я пытался добавить .name в разные места в typeahead, но безуспешно. Есть ли простой способ отобразить и сопоставить только .name, но при этом вернуть весь объект?


person Jesse    schedule 16.04.2013    source источник


Ответы (1)


Директива typeahead из репозитория http://angular-ui.github.io/bootstrap/ был создан, чтобы хорошо вписаться в существующую экосистему AngularJS. Это означает, что эта директива пытается повторно использовать как можно больше синтаксиса, фильтров и директив, уже используемых в AngularJS.

Вернемся к вашему вопросу. Сама фильтрация выполняется фильтром Angular filter, описанным здесь: http://docs.angularjs.org/api/ng.filter:filter Синтаксис упомянутого фильтра достаточно гибкий, чтобы ограничить поиск выбранным набором свойств:

typeahead="stuff as stuff.name for stuff in stuffs | filter:{name: $viewValue}"

Обратите внимание: filter:{name: $viewValue}

Рабочий план здесь: http://plnkr.co/edit/o1qWKq8LSmbbmVaYkOvb?p=preview

person pkozlowski.opensource    schedule 16.04.2013
comment
Большое спасибо! Клянусь, я пытался RTFM, но я думаю, что у меня будет время, чтобы продолжать в том же духе. - person Jesse; 18.04.2013
comment
Я не вижу разницы в том, что filter: {name: $viewValue } я попытался изменить его на filter: $viewValue, и результат был таким же. - person Saad Farooq; 01.07.2013
comment
@SaadFarooq Когда вы меняете синтаксис t filter: $viewValue, angular в основном создает строку JSON из объекта и ищет ее. Синтаксис, используемый pkozlowski, ищет ТОЛЬКО поле имени. Протестируйте, используя слово second на Plnkr выше. Это не появляется где-нибудь в полях имени. Если вы отредактируете его, как вы предложили, то второй покажет второй результат. - person jklemmack; 05.11.2013