I've got a pretty large app that has many dropdowns. I don't want to have to modify my data to add a blank option and I don't want the placeholder to be selectable. What's the best approach?
We can do this easy by using angular's powerful directive system to extend basic html.
app.directive('select', function($interpolate) {
return {
restrict: 'E',
require: 'ngModel',
link: function(scope, elem, attrs, ctrl) {
var defaultOptionTemplate;
scope.defaultOptionText = attrs.defaultOption || 'Select...';
defaultOptionTemplate = '<option value="" disabled selected style="display: none;">{{defaultOptionText}}</option>';
elem.prepend($interpolate(defaultOptionTemplate)(scope));
}
};
});
With this, we can now do the following:
<select ng-model="number"
ng-options="item.id as item.label for item in values">
</select>
This will create a select box with an unselectable placeholder that says "Select..."
If we want a custom placeholder we can simply do this:
<select ng-model="dog"
ng-options="dog.id as dog.label for dog in dogs"
default-option="What's your favorite dog?">
</select>
This will create a select box with an unselectable placeholder that says "What's your favorite dog?"
Plunker Example (in coffeescript): http://plnkr.co/edit/zIs0W7AdYnHnuV21UbwK
Plunker Example (in javascript): http://plnkr.co/edit/6VNJ8GUWK50etjUAFfey
You can also do it directly in the html.
<select ng-model="number"
ng-options="item.id as item.label for item in values">
<option value="" disabled selected style="display: none;"> Default Number </option>
></select>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With