Решение, которое я получил до сих пор: повторно использовал этот класс caret
и отобразил его поверх компонента, используя стиль position: relative; left: -1.5em;
, поместив элемент сразу после ui-select
(поместить его прямо внутрь ui-select
невозможнопотому что angularjs заменяет его содержимое собственными шаблонами - поэтому мой caret
идет после, но затем сдвигается влево)
Кроме того, мне пришлось присоединить ng-click
, который делает $select.toggle($event)
к этому элементу caret
.Поскольку $select
недоступен вне области действия ui-select
, мне пришлось представить внешний контроллер, который включает элементы ui-select
и caret
- и просто назначить $select
поле внутри него, используя ng-init
на ui-select
.
Так это выглядит примерно так:
<div ui-select multiple ng-model="selectedItems" class="form-control" ng-init="mySelect = $select">
<div ui-select-match>
<span>{{$item.name}}</span>
</div>
<div ui-select-choices repeat="item in availableItems" >
<span>{{item.name}}</span>
</div>
</div>
<span style="position: relative; left: -1.5em;" class="caret"
ng-click="mySelect.toggle($event)></span>
▼ отображается только тогда, когда раскрывающийся список не открыт.Кроме того, щелчок по нему требует некоторой пиксельной охоты (можно уменьшить, поместив caret
в делитель, который распространяется по вертикали).Так что это частичное решение.