https://plnkr.co/edit/yU4P3zsQ3QaH9Vby8M3I?p=preview
您可以将每个复选框的选中值保存在'eventTypeChkBox'数组中:
eventTypeChkBox: Array<{chkBoxImageUrl: string, id: string, val: string, checked: boolean}> = [
{chkBoxImageUrl: "http://www.w3schools.com/bootstrap/cinqueterre.jpg" ,id: "item-1", val: "1", checked: false},
{chkBoxImageUrl: "http://www.w3schools.com/bootstrap/cinqueterre.jpg", id: "item-2", val: "2", checked: false},
{chkBoxImageUrl: "http://www.w3schools.com/bootstrap/cinqueterre.jpg", id: "item-3", val: "3", checked: false},
{chkBoxImageUrl: "http://www.w3schools.com/bootstrap/cinqueterre.jpg", id: "item-4", val: "4", checked: false}
];
现在您可以将“checked”的值放入每个复选框的 [(ngModel)] 中:
<div *ngFor="let eventChk of eventTypeChkBox">
<div class="col-md-3">
<label class="btn-custom">
<img src="{{eventChk.chkBoxImageUrl}}" alt="{{eventChk.val}}" class="img-check img-circle" [ngClass]="{'check': eventChk.isClassVisible } "
width="100" height="100">
<input [(ngModel)]="eventChk.checked" (ngModelChange)="onModelChange(eventChk) type="checkbox" name="{{eventChk.id}}" id="{{eventChk.id}}" value="{{eventChk.val}}" class="hidden" autocomplete="off"
(change)="updateChecked(eventChk, $event); eventChk.isClassVisible = !eventChk.isClassVisible;">
</label>
<p>{{eventChk.val}}</p>
</div>
</div>
** 如果你想使用 [(ngModel)] 指令:
1.您应该在“AppModule”中导入“FormsModule”:
import {FormsModule} from "@angular/forms";
@NgModule({
imports: [ BrowserModule, FormsModule],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
2。您需要为每个“复选框”输入添加不同的“名称”属性,这就是我在 html 中使用 name="{{eventChk.id}}" (您需要唯一名称)的原因
当您拥有 [(ngModel)] 时,您可以控制检查的内容和不检查的内容。
如果您想检测模型更改,您可以在模板和类上使用 (ngModelChange)="onModelChange(eventChk)" :
onModelChange(eventTypeChkBoxObj) {
if(eventTypeChkBoxObj.checked) {
if(this.getCheckedCount() == 2){
let result = confirm("Multiple checkboxes?");
if(!result) eventTypeChkBoxObj.checked = false;
}
}
}
要检查的项目值你不需要'eventChkArr',你可以过滤它们:
getCheckedValues() {
return this.eventTypeChkBox.filter(obj => obj.checked).map(obj => obj.val)
}
检查的 obj 计数:
getCheckedCount():number{
return this.getCheckedValues().length;
}
例如:
eventTypeChkBox = [{checked:true, val:1},{checked:true, val:2},{checked:false, val:3}]
getCheckedValues() 将返回:
["1","2"]
祝你好运!