It is working for Static dropdown list, but when its applying for dynamic data load with angularjs the selectpicker has been applied, but data's are not loaded.
if I removed this directive from dropdown then datas are loaded perfectly, what is the issue? I have tried more...
Note : the method created using with class so, no issue in that
bootselectpicker: function() {
return {
restrict: "A",
require: "ngModel",
link: function(scope, element, attrs, ctrl) {
element.selectpicker();
}
}
}
<select id="special-size" bootselectpicker ng-model="items.selectSize" ng-options="size.key as size.value for size in products.sizes" ng-change="sizeChange('size',items.selectSize)" class="selectpicker size-droplist">
<option value="">Select Size</option>
</select>
You have to wait until the DOM is loaded since the SelectPicker is constructed based on the <option>
-elements inside your <select>
-element. If the ng-options has not been constructed yet there is no <option>
-elements and thus the SelectPicker is empty.
You init the SelectPicker after DOM is ready by using Angular's $timeout with no delay. Without delay the $timeout just waits until the DOM is ready and then runs the callback.
Like this:
link: function(scope, element, attrs, ctrl) {
$timeout(function() {
element.selectpicker();
});
}
Also, if your products.sizes
is updated you have to manually run element.selectpicker('refresh')
since the SelectPicker does not listen for changes in <option>
s.
a solution to this is the following:
Defining a select like this:
<select class="selectpicker" data-live-search="true" ng-model="id">
<option class="small-font" selected value='any'>Anyone</option>
<option class="small-font" ng-repeat="member in List" data-select-watcher data-last="{{$last}}" value="{{member.id}}">{{member.name}}</option>
</select>
and the selectWatcher directive:
app.directive('selectWatcher', function ($timeout) {
return {
link: function (scope, element, attr) {
var last = attr.last;
if (last === "true") {
$timeout(function () {
$(element).parent().selectpicker('val', 'any');
$(element).parent().selectpicker('refresh');
});
}
}
};
});
What it does is detect when the last option has been added in the select, and then choose the default option and refresh.
setTimeout(function () {
$('.selectpicker').selectpicker('refresh');
},1000)
Call this function where you are making your array for ng-repeat or ng-options