W3cubDocs

/Angular.js 1.6

Improve this Doc View Source select

  1. directive in module ng

HTML select element with angular data-binding.

The select directive is used together with ngModel to provide data-binding between the scope and the <select> control (including setting default values). It also handles dynamic <option> elements, which can be added using the ngRepeat or ngOptions directives.

When an item in the <select> menu is selected, the value of the selected option will be bound to the model identified by the ngModel directive. With static or repeated options, this is the content of the value attribute or the textContent of the <option>, if the value attribute is missing. Value and textContent can be interpolated.

The select controller exposes utility functions that can be used to manipulate the select's behavior.

Matching model and option values

In general, the match between the model and an option is evaluated by strictly comparing the model value against the value of the available options.

If you are setting the option value with the option's value attribute, or textContent, the value will always be a string which means that the model value must also be a string. Otherwise the select directive cannot match them correctly.

To bind the model to a non-string value, you can use one of the following strategies:

  • the ngOptions directive (select)
  • the ngValue directive, which allows arbitrary expressions to be option values (Example)
  • model $parsers / $formatters to convert the string value (Example)

If the viewValue of ngModel does not match any of the options, then the control will automatically add an "unknown" option, which it then removes when the mismatch is resolved.

Optionally, a single hard-coded <option> element, with the value set to an empty string, can be nested into the <select> element. This element will then represent the null or "not selected" option. See example below for demonstration.

Choosing between ngRepeat and ngOptions

In many cases, ngRepeat can be used on <option> elements instead of ngOptions to achieve a similar result. However, ngOptions provides some benefits:

  • more flexibility in how the <select>'s model is assigned via the select as part of the comprehension expression
  • reduced memory consumption by not creating a new scope for each repeated instance
  • increased render speed by creating the options in a documentFragment instead of individually

Specifically, select with repeated options slows down significantly starting at 2000 options in Chrome and Internet Explorer / Edge.

Known Issues

In Firefox, the select model is only updated when the select element is blurred. For example, when switching between options with the keyboard, the select model is only set to the currently selected option when the select is blurred, e.g via tab key or clicking the mouse outside the select.

This is due to an ambiguity in the select element specification. See the issue on the Firefox bug tracker for more information, and this Github comment for a workaround

Directive Info

  • This directive executes at priority level 0.

Usage

  • as element:
    <select
      ng-model="string"
      [name="string"]
      [multiple="string"]
      [required="string"]
      [ng-required="string"]
      [ng-change="string"]
      [ng-options="string"]
      [ng-attr-size="string"]>
    ...
    </select>

Arguments

Param Type Details
ngModel string

Assignable angular expression to data-bind to.

name
(optional)
string

Property name of the form under which the control is published.

multiple
(optional)
string

Allows multiple options to be selected. The selected values will be bound to the model as an array.

required
(optional)
string

Sets required validation error key if the value is not entered.

ngRequired
(optional)
string

Adds required attribute and required validation constraint to the element when the ngRequired expression evaluates to true. Use ngRequired instead of required when you want to data-bind to the required attribute.

ngChange
(optional)
string

Angular expression to be executed when selected option(s) changes due to user interaction with the select element.

ngOptions
(optional)
string

sets the options that the select is populated with and defines what is set on the model on selection. See ngOptions.

ngAttrSize
(optional)
string

sets the size of the select element dynamically. Uses the ngAttr directive.

Simple select elements with static options

Using ngRepeat to generate select options

Using ngValue to bind the model to an array of objects

Using select with ngOptions and setting a default value

See the ngOptions documentation for more ngOptions usage examples.

Binding select to a non-string value via ngModel parsing / formatting

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.6.6/docs/api/ng/directive/select