You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>

关键修正点:

  1. 选中状态绑定:用ims.Percentage === 1判断复选框状态——值为1时选中,0时未选中
  2. 值更新逻辑:通过$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:31:39