Javascript 在选择标记上检测对ngModel的更改(角度2)

Javascript 在选择标记上检测对ngModel的更改(角度2),javascript,angular,Javascript,Angular,我正在尝试检测标记中ngModel的更改。在Angular 1.x中,我们可以在ngModel上使用$watch或使用ngChange来解决这个问题,但我还不知道如何在Angular 2中检测ngModel的更改 完整示例: 正如我们所看到的,如果我们从下拉列表中选择不同的值,我们的ngModel会改变,视图中的插值表达式反映了这一点 如何在我的类/控制器中获得此更改的通知?更新: 分离事件和属性绑定: <select [ngModel]="selectedItem" (ngModelCh

我正在尝试检测标记中ngModel的更改。在Angular 1.x中,我们可以在ngModel上使用$watch或使用ngChange来解决这个问题,但我还不知道如何在Angular 2中检测ngModel的更改

完整示例:

正如我们所看到的,如果我们从下拉列表中选择不同的值,我们的ngModel会改变,视图中的插值表达式反映了这一点

如何在我的类/控制器中获得此更改的通知?

更新:

分离事件和属性绑定:

<select [ngModel]="selectedItem" (ngModelChange)="onChange($event)">
你也可以使用

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

另请参见

我无意中发现了这个问题,我将提交我使用过且效果不错的答案。我有一个搜索框,可以过滤和排列对象,在搜索框中我使用了ngModelChange=onChange$事件

在my.html中


你可能想保留一些额外的评论;你不想让这个问题被伪装成咆哮。那么,如果我只是绑定一个名为item的新变量,那么ngModel有什么意义呢?将ngModel括在括号中不是为了获取事件监听器,那么我们为什么要引入一个新变量呢?@lux,是的,问得好。selectedItem是我们的绑定数据,NgModel会自动为我们更新,但是。。。它不会通知我们更改,这通常是足够好的视图,这样会更新,但显然这对于您的用例来说还不够好。在我提到的另一个SO问题中,我描述了我如何尝试使用ngModelChange获得更改通知,但每次更改都会调用两次。我不知道这是不是一个错误。无论如何,添加一个更改事件绑定似乎可以解决这个问题。另外,我更新了plunker,它显示当onChange触发时selectedItem没有更新,因此我们似乎需要本地模板变量。@lux本例中的or项是一个本地引用。因此,我们可以在那里进行item.change。@lux,我已经描述了挂接的方法:绑定到ngModelChange自定义事件。问题是,对于,此事件对每个更改触发两次。仅供参考,当绑定到ngModelChange时,$event不是DOM。相反,它是表单元素的当前值,是输入元素的字符串。@MarkRajcok您能给我指一下相关文档吗?这样我就可以与我的开发团队的其他成员共享了?@NeilS,最接近的是
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)">
<select [(ngModel)]="selectedItem" #item (change)="onChange(item.value)">
<input type="text" [(ngModel)]="searchText" (ngModelChange)="reSearch(newValue)" placeholder="Search">
reSearch(newValue: string) {
    //this.searchText would equal the new value
    //handle my filtering with the new value
}