Angular 2 Form Error:path.split不是<formarray> this.myForm.get(i)的函数

时间:2016-11-26 15:57:28

标签: angular angular2-forms angular2-formbuilder

尝试在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:''
        });
    }


使用以下功能动态添加程序工作: -

addProgToForm(){

    const control = <FormArray>this.myForm.get('programmes');
        control.push(this.initProgramme());
  }


将票证添加到程序 THROWS ERROR

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


.get(程序),它表示 path.split不是函数


PS - 程序&#39; get(program)&#39;是要添加动态故障单的程序表单阵列的索引。它是从* ngFor中正确检索的。示例: - 添加第一个程序的索引0。

3 个答案:

答案 0 :(得分:4)

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

PageClass

答案 1 :(得分:0)

地址:FormArray;

DynForm:FormGroup;

this.DynForm = formBuild.group({             名字:&#39;克里希纳&#39;,             lastName:&#39;&#39;,             地址:this.address1(),             性别:&#39;男性&#39;         });

=========================

@try {
 // code that may throw exception

 }
 @catch (NSException * e) {
  // show alert
 }
 @finally {     
 }

请尝试这一步=====!在angular2最终版本中

答案 2 :(得分:0)

https://v8.angular.io/api/forms/AbstractControl#get

.get([programme])

如果 program 是一个数字,就是要走的路。