What it does
Writes values and listens to changes on a select element.
Used by NgModel
, FormControlDirective
, and FormControlName
to keep the view synced with the FormControl
model.
How to use
If you have imported the FormsModule
or the ReactiveFormsModule
, this
value accessor will be active on any select control that has a form directive. You do
not need to add a special selector to activate it.
How to use select controls with form directives
To use a select in a template-driven form, simply add an ngModel
and a name
attribute to the main <select>
tag.
If your option values are simple strings, you can bind to the normal value
property
on the option. If your option values happen to be objects (and you'd like to save the
selection in your form as an object), use ngValue
instead:
In reactive forms, you'll also want to add your form directive (formControlName
or
formControl
) on the main <select>
tag. Like in the former example, you have the
choice of binding to the value
or ngValue
property on the select's options.
Caveat: Option selection
Angular uses object identity to select option. It's possible for the identities of items to change while the data does not. This can happen, for example, if the items are produced from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the second response will produce objects with different identities.
To customize the default option comparison algorithm, <select>
supports compareWith
input.
compareWith
takes a function which has two arguments: option1
and option2
.
If compareWith
is given, Angular selects option by the return value of the function.
Syntax
Note: We listen to the 'change' event because 'input' events aren't fired for selects in Firefox and IE: https://bugzilla.mozilla.org/show_bug.cgi?id=1024350 https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/
- npm package:
@angular/forms
Class Overview
class SelectControlValueAccessor implements ControlValueAccessor {
constructor
(_renderer: Renderer, _elementRef: ElementRef)
value
: any
onChange
: (_: any) => {}
onTouched
: () => {}
compareWith
writeValue
(value: any) : void
registerOnChange
(fn: (value: any) => any) : void
registerOnTouched
(fn: () => any) : void
setDisabledState
(isDisabled: boolean) : void
}
Selectors
select:not([multiple])[formControlName]
select:not([multiple])[formControl]
select:not([multiple])[ngModel]
Class Description
Class Details
exported from forms/index, defined in forms/src/directives/select_control_value_accessor.ts