Реактивный источник управления формой - это класс, а не шаблон, поэтому, если вы хотите создать динамический флажок, вам нужно создать несколько formControl
Если вы хотите, чтобы изменения произошли только после отправки, вы можете передать{updateOn: "submit"} для получения данных только после submit
catsList = [{cName:"cat1"},{cName:"cat2"},{cName:"cat3"}];
newPostForm: FormGroup;
constructor(private fb: FormBuilder) {
const control = this.catsList.map((d)=>new FormControl())
this.newPostForm = this.fb.group({
Title: [''],
Categories: new FormArray(control,{updateOn:"submit"})
})
}
get catControl() {
return this.newPostForm.get('Categories')['controls'];
}
onSubmitedForm() {
}
FormArray основан на индексе, поэтому мы должны использовать индекс для отдельного formControl
<form [formGroup]="newPostForm" >
<input formControlName="Title" type="text" class="form-control" id="txtTitle" placeholder="Enter title of post...">
<h4>Categories</h4>
<ul>
<li *ngFor="let cat of catControl;let i =index">
<span style="margin-top: -2.5px;" formArrayName="Categories">
<input [formControlName]="i" id="CheckBox" type="checkbox" ></span> {{catsList[i].cName}}
</li>
</ul>
<input type="submit" name="btnSubmit" value="Save" id="btnSubmit" (click)="onSubmitedForm()" class="btn btn-primary">
</form>
Пример: https://stackblitz.com/edit/angular-dzxcf1