How do I detect change to ngModel on a select tag (Angular 2)?


Separate the event and property bindings:

<select [ngModel]="selectedItem" (ngModelChange)="onChange($event)">
onChange(newValue) {
    this.selectedItem = newValue;  // don't forget to update the model here
    // ... do other stuff here ...

You could also use

<select [(ngModel)]="selectedItem" (ngModelChange)="onChange($event)">

and then you wouldn’t have to update the model in the event handler, but I believe this causes two events to fire, so it is probably less efficient.

Old answer, before they fixed a bug in beta.1:

Create a local template variable and attach a (change) event:

<select [(ngModel)]="selectedItem" #item (change)="onChange(item.value)">


See also How can I get new selection in “select” in Angular 2?

Leave a Comment