Угловой инициализатор ui-select не работает при инициализации ng-модели
Я пытаюсь добавить новый выбор каждый раз, когда нажимается кнопка,
HTML:
<div ng-repeat = "select in selects track by $index">
<ui-select ng-model="selects[$index]" theme="select2" ng-disabled="disabled" style="min-width: 300px;">
<ui-select-match placeholder="Select a person in the list or search his name/age...">{{$select.selected.name}}</ui-select-match>
<ui-select-choices repeat="person in people">
<div ng-bind-html="person.name | highlight: $select.search"></div>
</ui-select-choices>
</ui-select>
</div>
<button ng-click="addNewSelect()"> Add new select</button>
Контроллер:
$scope.selects = [{}];
$scope.addNewSelect = function() {
$scope.selects.push({});
}
Массив объектов сохраняется в массиве "выборки", но заполнитель не входит в выборку, поскольку я изначально инициализирую ng-модель с пустым объектом. Как заставить его заполнитель работать в этом случае?
Вот Plunker для того же.
2 ответа
Вы скучаете по .selected
после selects[$index]
,
Без этого пользовательский интерфейс считает, что вы выбрали пустой объект (selects[$index]
) и не будет показывать заполнитель.
<ui-select ng-model="selects[$index].selected" theme="select2" ng-disabled="disabled" style="min-width: 300px;">
http://plnkr.co/edit/56SHyE01BJ4EXglLlIcb?p=preview
также вам не нужно искать с помощью индекса, вы можете просто использовать select.selected
<ui-select ng-model="select.selected" theme="select2" ng-disabled="disabled" style="min-width: 300px;">
Самый быстрый способ сделать это, добавив css display:block placeholder item.
.select2-chosen{
display: block !important;
}
Есть случаи, когда вышеупомянутое решение прекрасно работает, а где нет.
<ui-select ng-model="selectedChannel"
on-select="$ctrl.channelSelected(selectedChannel)">
<ui-select-match placeholder="Select Channel Type">
{{selectedChannel.text}}
</ui-select-match>
<ui-select-choices ui-select-header-group-selectable="$ctrl.selectGroupHeader"
group-by="groupFindChannel"
repeat="channel in (r.channels | filter: $select.search) track by channel.id">
<div ng-bind-html="channel.text | highlight: $select.search"></div>
</ui-select-choices>
</ui-select>
^ Здесь, чтобы получить заполнитель, чтобы показать... просто сделать
$scope.selectedChannel = null;
Надеюсь, поможет...