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
}