如何更新FormArray的控件

Mub*_*hir 16 angular2-forms angular

我的表单组代码是

this.myForm = this._fb.group({            
            branch_name: ['', [Validators.required]],
            branch_timing: this._fb.array([
                this.initBranchTiming(),
            ])                                
        });

initBranchTiming() {       
        return this._fb.group({
            day: ['', []],
            open_from: ['00:00:00', []],
            open_till: ['00:00:00', []]           
        });
  }
Run Code Online (Sandbox Code Playgroud)

branch_name由此代码更新

(<FormControl>this.myForm.controls['branch_name']).updateValue(this.branch_detail.branch_name);
Run Code Online (Sandbox Code Playgroud)

现在我必须更新表单数组的'day'字段.如何更新表格数组branch_timing的'day'字段?

Fed*_*lla 13

AFAIK在其FormGroup内部放置了FormArray名称的'FormControls',并使其成为一个列表,就像普通数组一样.

为了更新了FormControls个人,更新各自的价值AbstractControlFormGroup使用索引:

let index = 0; // or 1 or 2
(<FormArray>this.myForm.controls['branch_timing']).at(index).patchValue('example');
Run Code Online (Sandbox Code Playgroud)

或者你可以更新整个FormArray致电setValuepatchValue:

(<FormArray>this.myForm.controls['branch_timing']).setValue(['example', 'example1', 'example2']);
Run Code Online (Sandbox Code Playgroud)

setValue要求相匹配的整个结构或阵列FormArray,而patchValue可以采取超集或子集的阵列构成.(Angular2网站上的FormArray-class)

  • @Frederico P在网上找到最佳建议添加到formArray!尽管如此,我需要它才能使它工作:`(<FormArray> this.formName.get('FormArrayName')).push(new FormControl('SOME VALUE'));` (2认同)
  • 例如,如果你想要替换这一天,我就是这样做的:(<FormArray> this.myForm.controls ['branch_timing']).at(index).get("day").setValue("222 "); (2认同)

小智 1

这已经过测试并可在 Angular 2.0.0-rc.4 和 @angular/forms 0.2.0 上运行:

(<FormControl>this.myForm.controls.branch_timing.controls[0].controls.day)
  .updateValue('new value');
Run Code Online (Sandbox Code Playgroud)

在发布版本 Angular 2.0.0 和 @angular/forms 2.0.0 中,语法得到了简化:

this.myForm.value.branch_name = this.branch_detail.branch_name;
Run Code Online (Sandbox Code Playgroud)

this.myForm.value.branch_timing[0].day = 'New Value';
Run Code Online (Sandbox Code Playgroud)