Forms 角度复选框标签不触发更改事件

Forms 角度复选框标签不触发更改事件,forms,angular,checkbox,Forms,Angular,Checkbox,我已经实现了一个组复选框组件,如本文所述: 除了我有一个问题外,所有的工作都很好,复选框的标签不会触发更改事件,只有实际的复选框部分。在下面的plunker中,尝试单击复选框方框和标签,两者都触发复选框并更新数据模型,但只有复选框部分触发更改。我怀疑这与转移值有关 查看此plunker 代码 <checkbox-group [(ngModel)]="selectedItems"> <checkbox *ngFor="let item of availableItems

我已经实现了一个组复选框组件,如本文所述:

除了我有一个问题外,所有的工作都很好,复选框的标签不会触发更改事件,只有实际的复选框部分。在下面的plunker中,尝试单击复选框方框和标签,两者都触发复选框并更新数据模型,但只有复选框部分触发更改。我怀疑这与转移值有关

查看此plunker

代码

<checkbox-group [(ngModel)]="selectedItems">
   <checkbox *ngFor="let item of availableItems" 
             [value]="item"
             (change)="onItemChange($event, item)">
             {{item}}
   </checkbox>
 </checkbox-group>
 <p>Selected items - {{selectedItems | json}}</p>

{{item}}
所选项目-{selectedItems | json}


使用单击事件侦听器,而不是更改。像这样

(click)="onItemChange($event, item)"

如果您使用的是
ngModel
,还可以使用
(ngModelChange)
事件。 我有一些正常的复选框
,并且
(单击)
(更改)
事件从不被触发。 使用
(ngModelChange)
,它可以工作(如果使用
ngModel
,则还应与
以外的其他标记一起工作):


如果从复选框(而不是使用
(单击)
(更改)
时的
MouseEvent
)触发
$event
,则
$event
参数将是布尔值


通过使用
ngModel
ngModelChange
,您可以拆分香蕉盒
[(ngModel)]
,这样您就可以自己进行更改(可能还有额外的工作),而不是
[(ngModel)]
,后者可以自己进行“简单的”
ngModelChange
-更新。

太棒了,谢谢!你能解释一下为什么(变更)起到了一半的作用,让我有更好的理解吗?我认为问题与你正在使用的checkbox指令有关。如果将输入标记包装在标签标记中,那么更改事件将顺利进行。在你的plunker测试中试试这个
<input type="checkbox"
       (ngModelChange)="selectAllForBatchImport($event)"
       [ngModel]="areAllEntriesChecked"/>