angular - 如何检测下拉列表元素的变化?

我有一个用户列表。每个用户都是一个复合对象:{ id: '123', name: 'Bob', State: 'Colorado' }

我使用 *ngFor 呈现这些用户:

<div *ngFor="let u in users">
    {{ u.name }}
    <select [(ngModel)]="u.state">
       <option *ngFor="let s in states" [value]="s">{{s}}</option>
    </select>
</div>

当 select-value 改变时 - 我想通过 REST API 保存对象。

我尝试添加 (change)="changeState(u)",但这不起作用,显然 u.state 在我的 ( change) 回调被执行。

如果我没有循环,我会给我的下拉菜单一个引用:#state 然后使用 (change)="changeState(u, state.value)"

我唯一的选择是使用 $event.target.value 吗?还是有更巧妙的方法来做到这一点?该解决方案还取消了验证。

前两个解决方案尝试中的任何一个都可以挽救吗?

最佳答案

您可以将 ngModelChange 事件与 ngModel 分开:

<select [ngModel]="u.state" (ngModelChange)="changeState($event)">
       <option *ngFor="let s in states" [value]="s">{{s}}</option>
</select>

然后新的选择值将直接传递给changeState()

https://stackoverflow.com/questions/40535837/

相关文章:

javascript - 如何将 JSON/Bootstrap-Table 中的日期转换为 DD/M

cordova - 内容安全策略 Cordova 问题

python - 阅读 Pandas 数据框时跳过包含特定值的特定行

git - 我需要做一个 Git 克隆吗?

batch-file - 为什么不使用批处理文件中的 RMDIR 作为最后一个命令删除文件夹?

math - 围绕一个点旋转 Vector2

intellij-idea - 使用 Maven 项目创建测试类时,intellij 无法创建类文件

angular - 在 Angular2 中,您如何检测过滤器/管道未返回任何结果

r - 使用 R 和 dplyr 扩展和离散化时间序列数据

SQL Server - 如果列包含值,则按 ID 分组