我正在尝试根据我的 API 中的“是”或“否”值在 *ngFor 中实现切换滑块。必须在初始模态负载上检查初始切换滑块状态(滑块向左或向右)。
我在加载我的模式时获得了初始状态,但如果来自 API 的响应值为“否”,我无法滑动切换“是”。顺便说一句,我正在使用 Bootstrap 4。
我尝试了多种添加 NgClass 的变体,但我似乎无法让这部分工作。
这是我到目前为止所尝试的。
admin.component.html
<form [formGroup]="permissionForm">
<div class="form-group card" *ngFor="let item of permissionsUserMap; let i=index">
<div class="row p-1">
<div class="col">
<p class="d-inline">{{ item.permissionToolTip }} {{ item.hasPermission }}</p>
</div>
<div class="col">
<label class="switch float-right mb-0">
<input
#permissionToggle
[id]="i"
formControlName="HasPermission"
type="checkbox"
(change)="onChangePermission($event,i)"
[value]="item.hasPermission"
>
<!-- <ng-container *ngIf="item.hasPermission === 'Y'">
<span [ngClass]="{'input:checked,input:focus + slider round': item.hasPermission === 'Y'}"></span>
</ng-container>
<ng-container *ngIf="item.hasPermission === 'N'">
<span [ngClass]="{'slider round': item.hasPermission === 'N'}"></span>
</ng-container> -->
<!-- <span *ngIf="item.hasPermission === 'Y'" [ngClass]="'slider round'">Y</span>
<span *ngIf="item.hasPermission != 'Y'" [ngClass]="'noPermission round'">N</span> -->
<!-- <span *ngIf="item.hasPermission === 'Y'" [ngClass]="'slider round'">Y</span>
<span *ngIf="item.hasPermission != 'Y'" [ngClass]="'noPermission round'">N</span> -->
<!-- <span class="slider round"></span> -->
<span class="slider round" *ngIf="item.hasPermission === 'Y'"></span>
<span class="noPermission round" *ngIf="item.hasPermission === 'N'"></span>
</label>
</div>
</div>
</div>
</form>
admin.component.css
/* The switch - the box around the slider */
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
/* Hide default HTML checkbox */
.switch input {
opacity: 0;
width: 0;
height: 0;
}
/* The slider */
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: 0.4s;
transition: 0.4s;
}
input:checked + .slider {
background-color: rgba(58,177,96,1);
}
input:focus + .slider {
box-shadow: 0 0 1px rgba(58,177,96,1);
}
input:focus + .slider {
box-shadow: 0 0 1px rgba(58,177,96,1);
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
.noPermission {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.noPermission:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.noPermission.round {
border-radius: 34px;
}
.noPermission.round:before {
border-radius: 50%;
}
input:checked + .noPermission.slider {
background-color: rgba(58,177,96,1);
}
input:focus + .noPermission {
box-shadow: 0 0 1px rgba(58,177,96,1);
}
input:checked + .noPermission:before {
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
提前致谢。