Angular 2 表单错误:path.split 不是 <FormArray>this.myForm.get(i) 处的函数

Sum*_*ade 3 angular2-forms angular2-formbuilder angular

试图在 Angular 2 中创建一个嵌套的动态表单。

形成骷髅

this.myForm= this.formBuilder.group({
        programmes: this.formBuilder.array([this.initProgramme(),]),
    });

initProgramme() {
        return this.formBuilder.group({
            tickets: this.formBuilder.array([this.initTicket(),])
        });
    }


initTicket() {
        return this.formBuilder.group({
            field1:''
        });
    }
Run Code Online (Sandbox Code Playgroud)


添加程序动态工作具有以下功能: -

addProgToForm(){

    const control = <FormArray>this.myForm.get('programmes');
        control.push(this.initProgramme());
  }
Run Code Online (Sandbox Code Playgroud)


将票添加到程序抛出错误

addTicket(programme: any) {
        const control = (<FormArray>this.myForm.get('programmes')).get(programme); // THROWS ERROR  HERE
         (<FormArray>control.get('tickets')).push(this.initTicket());
    }
Run Code Online (Sandbox Code Playgroud)


.get(programme)它说path.split 不是一个函数


PS - 'get(programme)' 中的 program 是要添加动态票证的 Program Form Array 的索引。它是从 *ngFor 正确检索的。示例:- 添加第一个程序的索引 0。

Ser*_*pka 7

尝试通过字符串索引获得控制权:.get(programme.toString())

addTicket(programme: any) {
    const control = (<FormArray>this.myForm.get('programmes')).get(programme.toString());
     (<FormArray>control.get('tickets')).push(this.initTicket());
}
Run Code Online (Sandbox Code Playgroud)