Angular2中FormControlName的动态绑定

时间:2017-02-16 10:51:19

标签: angular

我正在创建嵌套组件。有多个formGroups我想动态绑定它们。例如。

组件中的forGroup就像

formGroup : {
    controls:{
        firstName: FormControl,
        lastName: FormControl,
        userName: FormControl,
        Password: FormControl
    }
}

HTML就像&它适用于多种控制..

<div [formGroup]='formGroup'>
    <div class="error-box">{{formGroup.controls.get('firstName').errors}}</div>

    <div *ngIf="formControl.firstName?.visible" [ngClass]="{'has-error': formControl.firstName.error}">
        <label>{{formGroup.controls.get('firstName').label}}</label>
        <input type="text" formControlName="firstName" [maxlength]="formContrl.firstName?.maxLength">
        <span class="error" *ngif="formControl.firstName.error"></span>
    </div>

    <div class="error-box">{{formGroup.controls.get('lastName').errors}}</div>

    <div *ngIf="formControl.lastName?.visible" [ngClass]="{'has-error': formControl.lastName.error}">
        <label>{{formGroup.controls.get('lastName').label}}</label>
        <input type="text" formControlName="lastName" [maxlength]="formContrl.lastName?.maxLength">
        <span class="error" *ngif="formControl.lastName.error"></span>
    </div>
</div>

我想在通用组件中绑定控件。

我试过了。

<text-input [group]="formGroup.controls.firstName" [formControls]="formControl.firstName"></text-input>

所以我正在创建常见的HTML,但是当我尝试绑定它时,它给出了绑定指令formControlName="formControls.name //withwhat I am passing"的错误

2 个答案:

答案 0 :(得分:9)

刚遇到同样的问题......

您必须使用User代替[formControlName]="formControls.name"

此处提供更多信息https://angular.io/docs/ts/latest/cookbook/dynamic-form.html

答案 1 :(得分:-1)

可以嵌套表格。我想你会在本文中找到你需要的东西:

How to Build Nested Model-driven Forms in Angular 2

如果您不需要嵌套表单,那么使用FormBuilder进行绑定非常简单(该示例在最后两个字段中包含验证器):

import { FormBuilder, Validators, FormGroup } from '@angular/forms';

let myForm = formBuilder.group({
     firstName: [this.myModel.firstName],
     lastName: [this.myModel.lastName],
     userName: [this.myModel.userName, Validators.required],
     Password: [this.myModel.Password, Validators.required]            
});