Javascript 如何从窗体数组和窗体组函数中获取值
代码来自这里Javascript 如何从窗体数组和窗体组函数中获取值,javascript,angular,typescript,forms,Javascript,Angular,Typescript,Forms,代码来自这里 export class AppComponent { title = 'Nested FormArray Example Add Form Fields Dynamically'; empForm:FormGroup; constructor(private fb:FormBuilder) { this.empForm=this.fb.group({ employees: this.fb.
export class AppComponent {
title = 'Nested FormArray Example Add Form Fields Dynamically';
empForm:FormGroup;
constructor(private fb:FormBuilder) {
this.empForm=this.fb.group({
employees: this.fb.array([]) ,
})
}
employees(): FormArray {
return this.empForm.get("employees") as FormArray
}
newEmployee(): FormGroup {
return this.fb.group({
firstName: '',
lastName: '',
skills:this.fb.array([])
})
}
addEmployee() {
console.log("Adding a employee");
this.employees().push(this.newEmployee());
}
removeEmployee(empIndex:number) {
this.employees().removeAt(empIndex);
}
employeeSkills(empIndex:number) : FormArray {
return this.employees().at(empIndex).get("skills") as FormArray
}
newSkill(): FormGroup {
return this.fb.group({
skill: '',
exp: '',
})
}
addEmployeeSkill(empIndex:number) {
this.employeeSkills(empIndex).push(this.newSkill());
}
removeEmployeeSkill(empIndex:number,skillIndex:number) {
this.employeeSkills(empIndex).removeAt(skillIndex);
}
onSubmit() {
console.log(this.empForm.value);
}
}
这是一个模板:
<form [formGroup]="empForm" (ngSubmit)="onSubmit()">
<div formArrayName="employees">
<div *ngFor="let employee of employees().controls; let empIndex=index">
<div [formGroupName]="empIndex" style="border: 1px solid blue; padding: 10px; width: 600px; margin: 5px;">
{{empIndex}}
First Name :
<input type="text" formControlName="firstName">
Last Name:
<input type="text" formControlName="lastName">
<button (click)="removeEmployee(empIndex)">Remove</button>
<div formArrayName="skills">
<div *ngFor="let skill of employeeSkills(empIndex).controls; let
skillIndex=index">
<div [formGroupName]="skillIndex">
{{skillIndex}}
Skill :
<input type="text" formControlName="skill">
Exp:
<input type="text" formControlName="exp">
<button (click)="removeEmployeeSkill(empIndex,skillIndex)">Remove</button>
</div>
</div>
<button type="button" (click)="addEmployeeSkill(empIndex)">Add Skill</button>
</div>
</div>
</div>
</div>
<p>
<button type="submit">Submit</button>
</p>
</form>
<p>
<button type="button" (click)="addEmployee()">Add Employee</button>
</p>
…提亚不工作了。。
也无法从技能数组中获取值
请帮助提交表单时,this.empForm.value的结构可以通过以下界面进行描述
导出接口员工{
名字:字符串;
lastName:string;
技能:技能[];
}
出口接口技能{
exp:字符串;
技能:弦乐;
}
其中,empForm.value
可由以下结构描述:
{
雇员:雇员【】;;
}
在提交时查询empForm
时,可以像查询常规对象一样获取数据
onSubmit() {
const firstNames = this.empForm.value.employees.map(x => x.firstName);
const firstEmployeeSkills = this.empForm.employees[0].skills.map(x => x.skill);
// etc
}
至于
this.empForm.get(“from_date”)
,您在empForm
上没有名为from_date
的属性,因此它不会返回任何内容。这里我在提交函数中编写了它,但在控制台中它会出现错误,因为无法读取0,请帮助您的表单代码。您应该从提交代码中删除.value
console.log(“第一个emp技能是”,this.getEmployeeSkills(0))
。我不明白为什么要在这个函数中添加.value
,而getEmployeeSkills
是您自己的函数,并且您知道它返回一个数组。我强烈建议尽可能使用Typescript,它确实有助于消除像这样的小错误。
onSubmit() {
const firstNames = this.empForm.value.employees.map(x => x.firstName);
const firstEmployeeSkills = this.empForm.employees[0].skills.map(x => x.skill);
// etc
}