angular 2 中未选中复选框时如何禁用单击事件
how to disable click event when checkbox is unchecked in angular 2
我在 ul 上使用点击事件。当复选框被选中时,我在 ul 下方有一个复选框,我的列表应该被启用并且点击事件应该起作用。如果复选框未选中,我的列表应该被禁用,点击事件不应该工作。
下面是我的列表:
<td mat-cell *matCellDef="let element; let i = index">
<div fxLayout="row" fxLayoutAlign="start start" [style.backgroundColor]="i.checked ? '#D4EBFF':''">
<div fxFlex="1">
<h2>{{element.position}}</h2>
</div>
<div fxLayout="column" fxLayoutAlign="space-between start" fxFlex="94">
<ul class="imagelist-ul" (click)="listclick()">
<li class="imagelist-label"><strong>{{element.label}}</strong></li>
<li class="imagelist-totalincl"><strong>Total Inclusion:</strong> {{element.total_inclusion}}</li>
<li class="imagelist-avg"><strong>Average Probability:</strong> {{element.avg_probability}}</li>
</ul>
</div>
<div fxFlex="5" class="imagelist-chkbox">
<mat-checkbox color="primary" #i (change)="!i['checked']"></mat-checkbox>
</div>
</div>
</td>
任何人都可以建议我如何实现这一目标。
根据您的复选框条件将 ngClass 添加到您的 ul 列表中,如下所示。
[ngClass]="{'isDisabled': !i.checked}"
添加以下 class 您的 css 文件。这里 pointer-events: none, 所有指针将被禁用。
.isDisabled {
pointer-events: none;
opacity: 0.5;
}
最终代码如下:-
<div fxLayout="row" fxLayoutAlign="start start" [style.backgroundColor]="i.checked ? '#D4EBFF':''">
<div fxFlex="1">
<h2>{{element.position}}</h2>
</div>
<div fxLayout="column" fxLayoutAlign="space-between start" fxFlex="94">
<ul class="imagelist-ul" (click)="listclick()" [ngClass]="{'isDisabled': !i.checked}">
<li class="imagelist-label"><strong>{{element.label}}</strong></li>
<li class="imagelist-totalincl"><strong>Total Inclusion:</strong> {{element.total_inclusion}}</li>
<li class="imagelist-avg"><strong>Average Probability:</strong> {{element.avg_probability}}</li>
</ul>
</div>
<div fxFlex="5" class="imagelist-chkbox">
<mat-checkbox color="primary" #i (change)="!i['checked']"></mat-checkbox>
</div>
</div>
</td>
并将此添加到 css 文件:
.isDisabled {
pointer-events: none;
opacity: 0.5;
}
我在 ul 上使用点击事件。当复选框被选中时,我在 ul 下方有一个复选框,我的列表应该被启用并且点击事件应该起作用。如果复选框未选中,我的列表应该被禁用,点击事件不应该工作。
下面是我的列表:
<td mat-cell *matCellDef="let element; let i = index">
<div fxLayout="row" fxLayoutAlign="start start" [style.backgroundColor]="i.checked ? '#D4EBFF':''">
<div fxFlex="1">
<h2>{{element.position}}</h2>
</div>
<div fxLayout="column" fxLayoutAlign="space-between start" fxFlex="94">
<ul class="imagelist-ul" (click)="listclick()">
<li class="imagelist-label"><strong>{{element.label}}</strong></li>
<li class="imagelist-totalincl"><strong>Total Inclusion:</strong> {{element.total_inclusion}}</li>
<li class="imagelist-avg"><strong>Average Probability:</strong> {{element.avg_probability}}</li>
</ul>
</div>
<div fxFlex="5" class="imagelist-chkbox">
<mat-checkbox color="primary" #i (change)="!i['checked']"></mat-checkbox>
</div>
</div>
</td>
任何人都可以建议我如何实现这一目标。
根据您的复选框条件将 ngClass 添加到您的 ul 列表中,如下所示。
[ngClass]="{'isDisabled': !i.checked}"
添加以下 class 您的 css 文件。这里 pointer-events: none, 所有指针将被禁用。
.isDisabled {
pointer-events: none;
opacity: 0.5;
}
最终代码如下:-
<div fxLayout="row" fxLayoutAlign="start start" [style.backgroundColor]="i.checked ? '#D4EBFF':''">
<div fxFlex="1">
<h2>{{element.position}}</h2>
</div>
<div fxLayout="column" fxLayoutAlign="space-between start" fxFlex="94">
<ul class="imagelist-ul" (click)="listclick()" [ngClass]="{'isDisabled': !i.checked}">
<li class="imagelist-label"><strong>{{element.label}}</strong></li>
<li class="imagelist-totalincl"><strong>Total Inclusion:</strong> {{element.total_inclusion}}</li>
<li class="imagelist-avg"><strong>Average Probability:</strong> {{element.avg_probability}}</li>
</ul>
</div>
<div fxFlex="5" class="imagelist-chkbox">
<mat-checkbox color="primary" #i (change)="!i['checked']"></mat-checkbox>
</div>
</div>
</td>
并将此添加到 css 文件:
.isDisabled {
pointer-events: none;
opacity: 0.5;
}