'I want to create group of checkboxes from formgroup and formarray
soo i want to create a group of checkboxes from locs array of my JSON actually i created a custom function to get especific part of formgroup by index and return array then on my html with for iterate this result and create list of checkboxes, but when i change the state of this checkbox don't change the value from my FormGroup.
this is my principal .TS
ngOnInit() {
this.dynamicForm = this.formBuilder.group({
data: new FormArray([])
});
}
get f() {
return this.dynamicForm.controls;
}
get t() {
return this.f.data as FormArray;
}
createFormsDynamically() {
const obj = Object.values(this.DisbursementDetail);
if (this.t.length < obj.length) {
for (let i = this.t.length; i < obj.length; i++) {
this.t.push(
this.formBuilder.group({
item: [obj[i]['itemRM']],
stockingUOM: [obj[i]['stockUoM']],
moq: [obj[i]['disbursementRMItemMOQ']],
required: [obj[i]['disbursementRMQty'], Validators.required],
locsArray: [obj[i]['locs']]
})
);
}
} else {
for (let i = this.t.length; i >= obj.length; i--) {
this.t.removeAt(i);
}
}
}
this is my JSON from RESTAPI.
this.DisbursementDetail = [{
"itemRM": "33237",
"disbursementFac": "01",
"disbursementTicket": "D-211227-0005",
"disbursementUser": 24104,
"disbursementSO": "566943",
"stockUoM": "EA",
"disbursementRMItemMOQ": 30000,
"warehouse": "RM",
"disbursementRMQty": "100.00",
"locs": [{
"loc": "TP08",
"oh": 29900,
"toTake": 100,
"checked": true
},{
"loc": "TP09",
"oh": 29300,
"toTake": 50,
"checked": true
},{
"loc": "TP10",
"oh": 29300,
"toTake": 50,
"checked": false
}]
}]
// i create this functions to get locs array by index from my HTML but i don't sure thats the correct way to do.
dataLoc(index){
return this.t.getRawValue()[index].locsArray as FormArray;
}
and this is my file of .HTML
<ion-col size="12" size-md="12" *ngIf="showSlide">
<form [formGroup]="dynamicForm" (ngSubmit)="nextSlide()">
<swiper #swiper [config]="confiSlide" (slideChange)="onSlideChange()">
<ng-template swiperSlide *ngFor="let dis of t.controls; let i = index">
<div class="slide" [formGroup]="dis">
<ion-card>
<ion-card-content>
<ion-row class="ion-justify-content-center">
<ion-col size="6" size-sm="6" size-xs="8">
<ion-item>
<ion-label>Item </ion-label>
<ion-input formControlName="item" readonly></ion-input>
</ion-item>
<ion-item>
<ion-label>UoM</ion-label>
<ion-input formControlName="stockingUOM" readonly></ion-input>
</ion-item>
</ion-col>
</ion-row>
<div *ngFor="let loc of dataLoc(i); let s = index">
<ion-list>
<ion-item>
<ion-label>{{loc.loc}}, OH: {{loc.oh}}, Take: {{loc.toTake}}</ion-label>
<ion-checkbox slot="end" checked="loc.Checked" formControlName="locsArray.Checked"></ion-checkbox>
</ion-item>
</ion-list>
</div>
<ion-row>
<ion-col size="12" size-sm="12">
<ion-item>
<ion-label>MOQ:</ion-label>
<ion-input formControlName="moq" readonly type="number"></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row>
<ion-col size="12" size-sm="12">
<ion-list lines="full" class="ion-no-margin">
<ion-list-header> Need </ion-list-header>
<ion-input formControlName="required" readonly></ion-input>
</ion-list>
</ion-col>
</ion-row>
<ion-row>
<ion-col *ngIf="slidePrevButton">
<ion-button (click)="prevSlide()" color="danger">
<ion-icon name="arrow-back-outline" slot="start"></ion-icon>
Preview
</ion-button>
</ion-col>
<ion-col *ngIf="slideNextButton">
<ion-button type="submit">
<ion-icon name="arrow-forward-outline" slot="start"></ion-icon>
Next
</ion-button>
</ion-col>
<ion-col *ngIf="!slideNextButton">
<ion-button (click)="saveDisbursementDetail()" color="success">
<ion-icon name="save-outline" slot="start"></ion-icon>
Save
</ion-button>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
</div>
</ng-template>
</swiper>
</form>
</ion-col>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
