首页 文章

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

提问于
浏览
3

我需要在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]
        })
      })

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

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

//

this.addAccForm.patchValue({cyc: { [0]: { det : {dcycid: 9876543}}}});

知道它应该怎么样?

6 回答

  • 3

    尝试使用theese代码

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

    另一种解决方案是

    (< FormGroup >this.addAccForm.controls['cyc']).controls['cycid'].patchValue('1234567');
    (< FormGroup >this.addAccForm.controls['cyc']).controls['det'].controls['dcycid'].patchValue('1234567');
    
  • 1

    这对我有用:

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

    以下是我解决问题的方法:

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

    谢谢

  • 0

    Here is the code for working for me.

    我正在使用Angular版本 "^6.0.0"

    var formArray = this.addAccForm.get("cyc") as FormArray;
    formArray.at(0)["controls"]["cycid"].patchValue("Value that you want to pass");
    
  • 1

    显然,这是一个较旧的条目,但这就是我处理类似情况的方式

    this.addAccForm.controls['cyc']['controls'][index].patchValue({cycid: '100'})
    

    这样的语法对我来说似乎更清晰 . 然而,一个相当简单的方法是首先简单地输出form.controls . 通过这种方式,您可以在控制台中看到您的表单包含的内容,并且基本上只是观察其结构 .

  • 0

    定义 FormGroup 以保存表单 .
    addAccForm: FormGroup

    使用 FormBuilder 创建表单 .

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

    现在创建一个修补表单值的方法 . 您可以将模型作为参数传递给方法 . 或者在组件类中定义的变量 .

    // GETER TO RETRIEVE THE CYC FORMARRAY
    get cycFormArray(): FormArray {
        return this.addAccForm.get('cyc') as FormArray;
    }
    
    patchForm(model: any) {
       this.addAccForm.patchValue({
           accid: [model.accid, Validators.required],
           status: model.status,
       });
    
       // PASS ARRAY TO PATCH FORM ARRAY
       this.patchCyc(model.cyc);
    }
    
    // METHOD TO PATCH FORM ARRAY 
    patchCyc(cycArray: any[]) {
        cycArray.forEach(item => {
            this.cycFormArray.push({
                this.fb.group({
                   prop1: item.prop1,
                   prop2: item.prop2,
                   ...
                })
            })
        })
    }
    

    patchCyc() 方法将循环遍历作为参数传递的数组 . 新的 FormGroup 将被推送到每个循环中的 cyc FormArray .

相关问题