提交表单时未重置角反应式表单中的表单数组

原学程将引见提接表单时未重置角反响式表单中的表双数组的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

提交表单时未重置角反应式表单中的表单数组 教程 第1张

成绩描写

我正在测验考试应用反响式表单在表单中创立多选复选框列表,但是碰到了1个成绩,即我创立的用于保存所选复选框值的Form数组在提接时未与表单的其他部门重置。这将招致数组具备与之前的提接对于应的多个空值。

相干的html代码:


<form [formGroup]="dieSetForm" (ngSubmit)="submitForm()" novalidate>
<label>Die Types:
  <div *ngFor="let dieType of dieTypes; let i = index">
<label for="dieType{{dieType}}">
 <input 
 id="dieType{{dieType}}" 
 type="checkbox" name="dieType" 
 [value] = "dieType.value" 
 (change)="onCheckboxChange($event)">
 {{dieType.name}}
 </label>
  </div>
  </label>
  <input type="submit" value="Submit">
 </form>



and the relevant part of the component.ts file:



 export class CreateDieSetComponent implements OnInit {
  dieSetForm: FormGroup;

  constructor(private fb: FormBuilder) {
 this.dieSetForm = this.fb.group({
dieTypesCheck: this.fb.array([]),
name: new FormControl('')
 })
  }


  dieTypes: Array<any> = [
 { name: '四', value: '四'},
 { name: '六', value: '六'},
 { name: '8', value: '8'},
 { name: '一0', value: '一0'},
 { name: '一二', value: '一二'},
 { name: '二0', value: '二0'}
  ];

  onCheckboxChange(e) {
 const dieTypesCheck: FormArray = this.dieSetForm.get('dieTypesCheck') as FormArray;

 if (e.target.checked) {
dieTypesCheck.push(new FormControl(e.target.value));
 } else {
let i: number = 0;
dieTypesCheck.controls.forEach((item: FormControl) => {
  if (item.value == e.target.value) {
 dieTypesCheck.removeAt(i);
 return;
  }
  i++;
});
 }
  }

  submitForm() {
 console.log(this.dieSetForm.value.name);
 console.log(this.dieSetForm.value.dieTypesCheck);
 this.dieSetForm.reset();
  }

  ngOnInit() {
  }
}

推举谜底

表双数组须要脚动浑空,重置只会重置个中的控件,您必需添减以下实质:

(this.dieSetForm.get('dieTypesCheck') as FormArray).clear();

假如要同时增除一切控件,请在对于组挪用Reset之前履行此操纵。

佳了闭于提接表单时未重置角反响式表单中的表双数组的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。