Angular 2:带有复选框的数组无法正常工作

Angular 2: Array with checkbox not working properly

我正在用 Checkbox 绑定一个数组。但是,当我尝试更改数组的单个元素的 bool 属性时,它会更改所有元素。

我的HTML组件如下。

<div class="col-sm-4" *ngFor="let karyalay of karyalayListFinal">
  <div class="checkbox-fade fade-in-primary">
    <label>
      <input formControlName="karyalay_group" type="checkbox" name="karyalaysCheckbox" value="{{karyalay.karyalayId}}" [(ngModel)]="karyalay.isChecked" 
      (click)="callEvents(karyalay.karyalayId)">
      <span>{{karyalay.karyalayName}}</span>
    </label>
  </div>
</div>

现在我正在尝试更改单个或选定元素的值,如下所示。

for (let karyalay of this.karyalayListFinal) {
    let tempInd = _.findIndex(this.roleMasterEventList, {'KARYALAY_ID': karyalay.karyalayId});
    if (tempInd > -1) {
      this.karyalayListFinal[tempInd].isChecked = true;
    }
}

实际上,如果 tempInd > -1,则仅应更改该元素的值。但它改变了所有人。

不知道这是 ngModel 问题还是什么?

谢谢

抱歉,看来你的方法太复杂了。

我不知道您何时为每个循环调用此方法,但我想您此时已经知道或拥有要搜索的 ID。我们称它为 searchID.

如果要查找具有匹配 ID 的对象,只需使用 for each 循环,如下所示:

this.karyalayListFinal.forEach( el =>  {
   if(el.karyalayId === searchID) {
      el.isChecked = true;
   }         
});

这应该可以解决您的问题。

你是 运行 这个循环 "this.karyalayListFinal"

中的所有元素
for (let karyalay of this.karyalayListFinal) {
    let tempInd = _.findIndex(this.roleMasterEventList, {'KARYALAY_ID': karyalay.karyalayId});
    if (tempInd > -1) {
      this.karyalayListFinal[tempInd].isChecked = true;
    }
}

条件“tempInd > -1”可能满足 "this.karyalayListFinal" 中的所有元素,因此所有元素都在变化。

我在 HTML 代码中使用了 [checked]="karyalay.isChecked" 而不是 ngModel,它开始工作了。

"name" 写入输入字段的属性对于循环创建的每个元素必须是唯一的 您必须绑定数组中每个对象的 ID "karyalayListFinal" 以使它们唯一。

将输入标签放入 *ngFor 将创建多个输入标签。输入的名称 属性 必须不同。作为 HTML 使用名称 属性 配置输入 属性 的更改。因此,通过在传入 *ngFor 的模型中保留一个名称字段,使这个名称 属性 对于每个输入都是唯一的。 并针对选中的 属性 而不是 ngModel。并做类似的事情 [checked]="yourmodel.isChecked",将模型中 isChecked 属性 的默认值保持为 false。

希望对你有所帮助。