首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套角formControlName动态赋值formGroups

嵌套角formControlName动态赋值formGroups
EN

Stack Overflow用户
提问于 2018-06-08 10:35:44
回答 1查看 3.4K关注 0票数 1

我想使用formControlNameformArray在angular6中动态创建的input表单上设置formGroupformArray

component.html :

代码语言:javascript
复制
 <form [formGroup]="ecosystemFormG" novalidate>  
        <div  formArrayName="transactions">
            <div  [formGroupName]="i" *ngFor="let transaction of getTransactions(ecosystemFormG); let i = 'index'">
                <div>
                    <!-- Dropdownselect for transactionVintage  Calling methd (transactionVintageMethod)-->
                </div>
                <div formArrayName="transactionVintageValues">
                    <div   [formGroupName]="j" *ngFor="let value of getTransactionVintage(transaction); let j = 'index'">
                        [[ value.placeholder ]] -->not printing anything
                                        [[ value.ctrlname ]]-->not printing
                                        [[ j ]] [[value]]
                                        <mat-form-field color="accent">
                                            <input matInput [placeholder]="value.placeholder" [formControlName]="value.ctrlname">  
                                        </mat-form-field>  <--throwing error  -->

                    </div> 
                </div>
            </div>
        </div>  
</form>


 [[ecosystemFormG.value | json]]

这是Json正在创建[[ecosystemFormG.value | json]]

代码语言:javascript
复制
{"transactions": [
        { 
          "transactionVintage": 3, 
          "transactionVintageValues": [
            {
              "ctrlName": "ctrlname_1",
              "placeholder": "plcaholder1"
            },
            {
              "ctrlName": "ctrlname_2",
              "placeholder": "plcaholder2"
            },
            {
              "ctrlName": "ctrlname_3",
              "placeholder": "plcaholder3"
            }
          ]
        }
      ]
}

component.ts

代码语言:javascript
复制
    export class EcosystemComponent implements OnInit {

    ecosystemFormG: FormGroup;

    getTransactions(form) { 
      return form.controls.transactions.controls;
    } 

    getTransactionVintage(form) { 
      return form.controls.transactionVintageValues.controls;
    }

    transactionVintageMethod(_event, _transactionForm, i){ 
        let _ctrls = this.getTransactionVintage(_transactionForm); 
        this.remove(i);
        for(var l=1; l<=_event.value; l++) { 
            this.add(i,l);
        }
    }

    remove(i){
         // remove all input fields 
    }

    add(i,l) { 
      const control = <FormArray>this.ecosystemFormG.get('transactions')['controls'][i].get('transactionVintageValues');
      //some unknown logic to put formConetrolName and placeholder
      control.push(this.initTransactionVintageValues(l));
    }

    initTransactions() {
        return new FormGroup({ 
          transactionVintage: new FormControl(''), 
          transactionVintageValues: new FormArray([])
        });
    }

    initTransactionVintageValues(l) { 
        let ctrlname = "ctrlname_" + l;
        let plcaholder =  "plcaholder" + l

       return new FormGroup({
         ctrlName: new FormControl(ctrlname), 
         placeholder : new FormControl(plcaholder)
       });
    }

    ngOnInit() { 
        this.ecosystemFormG = new FormGroup({ 
          transactions: new FormArray([
            this.initTransactions(),
          ]),
        });
    }
}

我在json中的transactionVintage键是数字html中的下拉选择器,它告诉要创建的输入字段的数量。

在这里,我可以创建动态输入字段。

因此,问题在于我们如何为动态创建的输入字段分配formControlName和plcaholder。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 10:45:15

为什么不直接使用普通绑定呢?

代码语言:javascript
复制
<div   [formGroupName]="j" *ngFor="let value of getTransactionVintage(transaction); let j = index">
    <mat-form-field color="accent">
        <input matInput [placeholder]="value.placeholder" [formControlName]="value.ctrlname"> 
    </mat-form-field> 
</div> 

另外,为什么'index'*ngFor中有单引号呢?你不需要单引号。

代码语言:javascript
复制
*ngFor="let item of items; let i = index"

代码语言:javascript
复制
*ngFor="let user of users; index as i"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50758739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档