在select标签上检测对ngModel的更改(Angular 2)

我试图在<select>标签中检测ngModel的变化。 在Angular 1.x中,我们可以使用ngChange上的$watch来解决这个ngModel ,或者使用ngChange来解决这个ngChange ,但是我还没有理解如何检测Angular 2中ngModel的变化。

例如 : http : //plnkr.co/edit/9c9oKH1tjDDb67zdKmr9?p=info

正如我们所看到的,如果我们从下拉列表中select一个不同的值,我们的ngModel改变,并且视图中的插值expression式反映了这一点。

我如何在class级/pipe理员中得到这个变化的通知?

更新

分离事件和属性绑定:

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

你也可以使用

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

然后你不必在事件处理程序中更新模型,但我相信这导致两个事件触发,所以它可能效率较低。


老答案,在他们修复beta.1中的bug之前:

创build一个本地模板variables并附加(change)事件:

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

plunker

另请参见如何在Angular 2的“select”中获得新的select?

我绊倒了这个问题,我会提交我的答案,我使用和工作得很好。 我有一个search框,筛选和对象数组,并在我的search框中使用(ngModelChange)="onChange($event)"

在我的.html

 <input type="text" [(ngModel)]="searchText" (ngModelChange)="reSearch(newValue)" placeholder="Search"> 

然后在我的component.ts

 reSearch(newValue: string) { //this.searchText would equal the new value //handle my filtering with the new value } 

这不会真正检测到模型更改,它会检测input字段中的任何更改事件。 例如,如果input字段的值为“my_search_word”,并将其更改为“my_search_word_2”,则返回“my_search_word”,在这种情况下,模型值并不真正改变,但reSearch($event)仍然认为有一个变化。