ui-select поиск по определенным свойствам объекта

Могу ли я фильтровать поиск в ui-select по определенным полям моего объекта? Или я должен создать собственный фильтр? Я видел этот ответ, и он говорит, что он работает, но мой следующий код не работает:

<ui-select ng-model="model.selected">
    <ui-select-match>
        <span class="ng-cloak">{{$select.selected.id ? $select.selected.id+ ' (' + $select.selected.sn + ') ' : "Select One" }}</span>
    </ui-select-match>
    <ui-select-choices repeat="item in items | filter: {id: $select.search.id, sn: $select.search.sn}">
        <span ng-bind="(item.id) + ' (' + (item.sn)  + ') ' "></span>
    </ui-select-choices>
</ui-select>

person sisimh    schedule 18.10.2016    source источник


Ответы (1)


Предполагая, что каждый item в items имеет следующие атрибуты:

  • id
  • sn
  • fn

Учитывая следующий набор данных:

[ 
    {"id":"Ja111", "sn":"Jacobs","fn":"Jim"},
    {"id":"Ja222", "sn":"Jagger","fn":"Robert"},
    {"id":"Jo111", "sn":"Jones","fn":"Stan"},
    {"id":"J111", "sn":"Johnson","fn":"Alfred"},
    {"id":"Sm111", "sn":"Smith","fn":"Joe"}
]

с использованием:

<ui-select-choices repeat="item in items | filter: {id: $select.search, sn: $select.search}">

выполнит операцию «и» над указанными полями (в данном случае id и sn) (например, критерий поиска «Джо» найдет только «Стэн Джонс»)

с использованием:

<ui-select-choices repeat="item in items | filter: $select.search">

выполнит операцию «или» во всех полях (например, критерий поиска «Джо» найдет «Стэн Джонс», «Альфред Джонсон» и «Джо Смит»)

с использованием:

<ui-select-choices repeat="item in items | propsFilter: {id: $select.search, sn: $select.search}">

выполнит операцию «или» над указанными полями (в данном случае id и sn) (например, критерий поиска «Джо» найдет «Стэн Джонс» и «Альфред Джонсон» — обратите внимание, что он не найдет «Джо Смит», поскольку фильтр не смотрит на поле fn)

Следующий Plunkr показывает приведенные выше примеры в действии.

Для ваших требований (я предполагаю, что вам нужен фильтр «или», но только для определенных полей), я бы пошел по маршруту propsFilter. Кажется, это то, что также использует базовая демонстрация ui-select.

person Ian A    schedule 28.10.2016