在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)
仍然认为有一个变化。