我有一些数据正在表中使用ngFor指令显示。我在最后一栏中有复选框,我希望它仅选择将要选择的行,而不选择其他行。这是我的代码
HTML代码
<div *ngIf="!admin">
<div class="row clearfix">
<div class="col-sm-12">
<input type="checkbox" name="permission12" value="" (change)="isSelected = !isSelected" class="filled-in" id="permission12" (click)="chosen(listSupportAdminSchools.items)" />
<label for="permission12">: Select All</label>
<table class="table-bordered table-striped" style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Registration Number</th>
<th>Enrollment Type</th>
<th>Entity Type</th>
<th>Location</th>
<th>IsActive</th>
<th>Select</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let x of listSupportAdminSchools.items;">
<td>{{x.name}}</td>
<td>{{x.registrationNumber}}</td>
<td>{{x.educationType}}</td>
<td>{{x.administrativeType}}</td>
<td>{{x.county}}
<span>,</span>{{x.city}}
<span>,</span>{{x.district}}</td>
<td></td>
<td style="text-align: center">
<!-- <button (click)="onClick()" class="btn btn-primary waves-effect">Select</button> -->
<input type="checkbox" name="permission13" value="" [(ngModel)] = "isSelected" class="validate form-control" id="permission13" (click)="chosen()" />
<label for="permission13">: Select</label>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
在我的.ts文件中,我有一个isSelected布尔变量设置为false。
每当我单击行中的一个复选框时,它也会选择另一个。但是全选复选框可以正常工作
答案 0 :(得分:1)
此问题不是由角度引起的,而是由HTML如何处理label
的{{1}}属性引起的。浏览器会查找具有匹配的for
属性的 first 元素,然后将所有点击发送给该元素。
要解决此问题,您需要为每个复选框指定唯一的ID:
id
更改:
首先,我们使用修改<div *ngIf="!admin">
<div class="row clearfix">
<div class="col-sm-12">
<input type="checkbox" name="permission12" value="" (change)="isSelected = !isSelected" class="filled-in" id="permission12" (click)="chosen(listSupportAdminSchools.items)" />
<label for="permission12">: Select All</label>
<table class="table-bordered table-striped" style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Registration Number</th>
<th>Enrollment Type</th>
<th>Entity Type</th>
<th>Location</th>
<th>IsActive</th>
<th>Select</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let x of listSupportAdminSchools.items; let i = index">
<td>{{x.name}}</td>
<td>{{x.registrationNumber}}</td>
<td>{{x.educationType}}</td>
<td>{{x.administrativeType}}</td>
<td>{{x.county}}
<span>,</span>{{x.city}}
<span>,</span>{{x.district}}</td>
<td></td>
<td style="text-align: center">
<!-- <button (click)="onClick()" class="btn btn-primary waves-effect">Select</button> -->
<input type="checkbox" [name]="'permission13' + 1" value="" [(ngModel)] = "x.isSelected" class="validate form-control" [id]="'permission13' + i" />
<label [for]="'permission13' + i">: Select</label>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
来为我们跟踪索引
*ngFor
然后,我们进行一些简单的字符串填充,以确保每个复选框*ngFor="let x of listSupportAdminSchools.items; let i = index"
是唯一的
id
最后,我们以相同的方式修改标签[id]="'permission13' + i"
for
注意:
[for]="'permission13' + i"
对象的其他唯一属性(例如*ngFor
(已删除)已更新单行的选择:
更新复选框绑定:
[id]="'permission13' + x.objectId"
您将需要模型[ngModel] = "selectedRow === x" (ngModelChange)="selectedRow = x"
中的一个属性。单击复选框后,将设置此值。现在,每个复选框都绑定到一个表达式,因此一次只应选中一个复选框。