patch使用angular2在嵌套表单控件中的值

K O*_*Oul 4 angular2-forms angular2-formbuilder

我需要在FormBuiler中的嵌套控件中设置一个值,模型如下:

this.addAccForm = this.fb.group({
      accid: ['', Validators.required],
      status: '',
      cyc: this.fb.array([
        this.initCyc(),
      ])
    })

initCyc() {
      return this.fb.group({
        cycid: ['', Validators.required],
        name: ['', Validators.required],
        description: ['', Validators.required],
        status: ['', Validators.required],
        det: this.fb.group({
            dcycid: ['', Validators.required],
            status: ['', Validators.required]
        })
      })
Run Code Online (Sandbox Code Playgroud)

我需要设置一个值cycid和dcycid但我坚持它,我试图使用以下行,但它没有帮助:

this.addAccForm.patchValue({cyc: { [0]: {cycid: 1234567 }}});
Run Code Online (Sandbox Code Playgroud)

//

this.addAccForm.patchValue({cyc: { [0]: { det : {dcycid: 9876543}}}});
Run Code Online (Sandbox Code Playgroud)

知道它应该怎么样?

Ale*_*dre 8

这对我有用:

this.addAccForm.patchValue({'cyc': {cycid: 1234567 }});
Run Code Online (Sandbox Code Playgroud)


sai*_*inu 5

尝试使用theese代码

this.addAccForm.patchValue({cyc: {cycid: 1234567 }});

this.addAccForm.patchValue({cyc: { det : {dcycid: 9876543}}});
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是

(< FormGroup >this.addAccForm.controls['cyc']).controls['cycid'].patchValue('1234567');
(< FormGroup >this.addAccForm.controls['cyc']).controls['det'].controls['dcycid'].patchValue('1234567');
Run Code Online (Sandbox Code Playgroud)


zza*_*res 5

更新

使用该方法更新 Angular 的嵌套字段FormGroup看起来更干净get,如下所示:

this.addAccForm.get('cyc.det.dcycid').patchValue(9876543);
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因你喜欢对象语法:

this.addAccForm.get('cyc.det').patchValue({ dcycid: 9876543 });
Run Code Online (Sandbox Code Playgroud)


K O*_*Oul 1

这是我解决问题的方法:

(this.addAccForm.controls['cyc'].at(0)).patchValue({cycid: 12345 });  
//
(this.addAccForm.controls['cyc'].at(0)).controls['det'].at(0).patchValue({dcycid: 9876543});
Run Code Online (Sandbox Code Playgroud)

谢谢