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

СИТУАЦИЯ:

В своем приложении я использую angular ui-select, отображающий список людей (массив объектов ).

Он работает нормально, за исключением одной небольшой проблемы:

Первый элемент списка выбрать нельзя. Я не могу это выбрать.


КОД:

<ui-select multiple tagging tagging-label="new tag" ng-model="multipleDemo.selectedPeople" theme="select2" ng-disabled="disabled" style="width: 800px;">
  <ui-select-match placeholder="Select person...">{{$item.name}} &lt;{{$item.email}}&gt;</ui-select-match>
  <ui-select-choices repeat="person in people | propsFilter: {name: $select.search, age: $select.search}">
    <div ng-bind-html="person.name | highlight: $select.search"></div>
    <small>
      email: {{person.email}}
      age: <span ng-bind-html="''+person.age | highlight: $select.search"></span>
    </small>
  </ui-select-choices>
</ui-select>


PLUNKER:

http://plnkr.co/edit/CVaMvt4zBUBD2QEsfIdk?p=preview


ВОПРОС:

Как я могу выбрать первый элемент в angular ui-select - массив объектов?


ПРИМЕЧАНИЕ.

Ответ Александра является правильным, потому что он дает решение этой проблемы для ui-select, какая версия ‹чем 0.9.5.

Начиная с версии 0.9.5. эта проблема решена.

Это была проблема, открытая в GitHub:

https://github.com/angular-ui/ui-select/issues/477#issuecomment-66795541


person FrancescoMussi    schedule 05.12.2014    source источник


Ответы (2)


Исправление для v0.9.4.

После 10 минут отладки я обнаружил ошибку в этой строке (ui-select исходный код)

item = ctrl.tagging.fct !== undefined 
         ? ctrl.tagging.fct(ctrl.search) 
         : item.replace(ctrl.taggingLabel,'');

но item - это объект, а не строка, поэтому происходит ошибка. Если вы установите для этой опции tagging-label = "" значение false, вы сможете выбрать первый элемент. Я не знаю, когда элемент будет передан в виде строки, возможно, это ошибка или для этого нужно установить другие параметры ..

person Oleksandr T.    schedule 05.12.2014

Оказывается, в v0.9.4 и ранее есть ошибка с функцией тегирования, которая вызывает это. Лучшее решение - обновить ui-select до версии 0.9.5+.

В качестве примечания: в вашем примере отсутствует необходимая функция tagging $ scope, прочтите документацию для плагина: https://github.com/angular-ui/ui-select/wiki/ui-select.

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

Если вы работаете с массивом объектов, вы ДОЛЖНЫ определить функцию тегирования, чтобы директива знала, как должен выглядеть объект, который будет помещен в массив.

person Brian    schedule 12.12.2014