ngFor生成复选框绑定值异常:选中/未选中均存1的问题
问题解决方法
你的代码问题出在双向绑定逻辑错误:
[ngModel]="ims.Percentage * 0"会把任何数值转成0,导致复选框永远处于未选中状态(ngModelChange)="ims.Percentage = 1"不管复选框实际选中状态,都会强制赋值为1,完全忽略了用户操作
针对NG-ZORRO的nz-checkbox,正确实现方式如下:
<div *ngFor="let ims of mIntake.TblIntakeStaff" style="display: flex; margin-bottom: 4px"> <div style="flex-grow: 1; flex-basis: 0">{{ ims.Staff.FirstName }} {{ ims.Staff.Surname }}</div> <div style="flex-grow: 1; flex-basis: 0"> <label nz-checkbox [ngModel]="ims.Percentage === 1" (ngModelChange)="ims.Percentage = $event ? 1 : 0" > </label> </div> </div>
关键修正点:
- 选中状态绑定:用
ims.Percentage === 1判断复选框状态——值为1时选中,0时未选中 - 值更新逻辑:通过
$event获取复选框的布尔状态(选中为true,未选中为false),将其转换为对应的1或0赋值给ims.Percentage
如果使用原生checkbox,逻辑完全一致,只需替换标签即可:
<div *ngFor="let ims of mIntake.TblIntakeStaff" style="display: flex; margin-bottom: 4px"> <div style="flex-grow: 1; flex-basis: 0">{{ ims.Staff.FirstName }} {{ ims.Staff.Surname }}</div> <div style="flex-grow: 1; flex-basis: 0"> <input type="checkbox" [ngModel]="ims.Percentage === 1" (ngModelChange)="ims.Percentage = $event ? 1 : 0" > </div> </div>
这样就能实现选中时保存1,未选中时保存0的需求。
内容的提问来源于stack exchange,提问作者Ryn9011
相关产品推荐
相关产品推荐

