I am trying to add a new select every time a button is clicked,
The 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>
The controller:
$scope.selects = [{}];
$scope.addNewSelect = function() {
$scope.selects.push({});
}
The array of objects gets saved in the array 'selects', but the placeholder is not coming in the selects as I am initializing the ng-model with an empty object initially. How to get he placeholder working in this case?
Here is the Plunker for the same.
You are missing the
.selected
after theselects[$index]
.Without this, the ui-select believes that you have selected an empty object (the
selects[$index]
) and won't show the placeholder.http://plnkr.co/edit/56SHyE01BJ4EXglLlIcb?p=preview
also you dont need to look up using the index, you can just use
select.selected
http://plnkr.co/edit/3Uq8lDtDOaj5mIZVrCfv?p=preview
The fastest way to do that adding css display:block placeholder item.
There are instances where the above solution works great and where it does not.
^ Here to get the placeholder to show... just make
Hope it helps...