离子 3 表单阵列验证动态单选按钮组



我正在尝试验证从数组对象动态创建的单选按钮组,我希望它以我发布的问题寻求答案的形式进行验证,但我没有得到澄清并再次进行了一些研究,发现这篇文章遵循了它的踪迹并找到了formArrayName,但无法实现验证

<form[formGroup]="form">
<ion-select formControlName="type">
<ion-option value="1">Full Time</ion-option>
<ion-option value="2">Part Time</ion-option>
</ion-select>
<div formArrayName="employee_details">
<ion-row class="rows" *ngFor="let employee of employee;  let rowIndex = index">
<ion-col text-center="text-center" col-6="col-6">
[ {{employee.id}} ]
<br> {{employee.name}}
</ion-col>
<ion-col class="rows last" col-6="col-6">
<ion-list class="row" no-lines="no-lines" radio-group="radio-group">
<ion-item col-4="col-4">
<ion-radio class="radio " mode="md" value="Paid"></ion-radio>
</ion-item>
<ion-item col-4="col-4">
<ion-radio class="radio " mode="md" value="Unpaid"></ion-radio>
</ion-item>
</ion-list>
</ion-col>
</ion-row>
</div>
</form>

.JS

import { FormBuilder, FormGroup, FormControl,FormArray, Validators } from '@angular/forms ';
class type {
public name: string;
public id: string;
}
...
class employee {
public name: string;
public id: string;
}
...
employee: employee = [{
id: 1,
name: "emp1"
}, {
id: 2,
name: "emp2"
}, {
id: 3,
name: "emp3"
}];
form: FormGroup;
this.form = new FormGroup({
'type': new FormControl(null, [Validators.required]),
'employee_details': new FormArray([])
});
Object.keys(this.employee).forEach(function(key, index) {
console.log(key);
// problem is here 
const control = new FormControl(null, Validators.required);
( < FormArray > this.form.get('employee_details')).push(control);
});

这不是formArray,但它肯定会帮助你

。.html

<form [formGroup]="form">
<ion-row class="rows" *ngFor="let detail of details; let i = index">
<ion-col text-center="text-center" col-6="col-6">
{{your_data}}
</ion-col>
<ion-col class="rows last" col-6="col-6">
<ion-list class="row" no-lines="no-lines" radio-group="radio-group" formControlName="action{{i}}">
<ion-item col-4>
<ion-radio class="radio true" mode="md" value="true"></ion-radio>
</ion-item>
<ion-item col-4>
<ion-radio class="radio false" mode="md" value="false"></ion-radio>
</ion-item>
<ion-item col-4>
<ion-radio class="radio " mode="md" value="not sure"></ion-radio>
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<button ion-button (click)="submit()" [disabled]="!form.valid">Submit</button>
</form>

.ts在获取数据的位置添加此代码。

let i;
for(i in this.details){
this.form.setControl('action'+i, new FormControl('', Validators.required));
}

变量 'i' 只是用来产生 0,1,2,3 以添加控件名称。 您可以使用自己的方式执行此操作,但需要循环。

无需执行您现在正在执行的操作,只需map数组,然后为每个元素创建一个FormControl

试试这个:

this.form = new FormGroup({
type: new FormControl(null, [Validators.required]),
employee_details: new FormArray([this.employee.map(emp => new FormControl(null, Validators.required))])
});

最新更新