角度2 - 形式组成分

Ale*_*fan 9 angular2-forms angular

我正在尝试构建一个数据驱动的表单,输入来自另一个组件,如下所示:

<form [formGroup]="signupForm" (ngSubmit)="onSubmit()">
    <app-form-group [name]="name"></app-form-group>
    <app-form-group [name]="email"></app-form-group>
    <app-form-group [name]="other"></app-form-group>
</form>
Run Code Online (Sandbox Code Playgroud)

app-form-group组件将如下所示:

<div class="form-group">
    <label class="col-md-2 control-label">{{Name}}</label>
    <div class="col-md-9">
  <input class="form-control" [name]="name" [formControlName]="formCtrlName">
</div>
Run Code Online (Sandbox Code Playgroud)

问题是formControlName需要一个formGroup指令,因此我得到这个错误:

Error : Error in ./FormGroupComponent class FormGroupComponent - inline template:3:58 caused by: formControlName must be used with a parent formGroup directive.You'll want to add a formGroup
   directive and pass it an existing FormGroup instance (you can create one in your class).
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题吗?

小智 6

您可以使用 @Input 属性将引用获取到子组件中:

app-form-group.ts:

@Input('group')
public signupForm: FormGroup;
Run Code Online (Sandbox Code Playgroud)

应用程序.html:

<form [formGroup]="signupForm" (ngSubmit)="onSubmit()">
    <app-form-group [name]="name" [group]="signupForm"></app-form-group>
    <app-form-group [name]="name" [group]="signupForm"></app-form-group>
    <app-form-group [name]="name" [group]="signupForm"></app-form-group>
</form>
Run Code Online (Sandbox Code Playgroud)

app-form-group.html:

<div class="form-group" [formGroup]="signupForm">
   <label class="col-md-2 control-label">{{Name}}</label>
   <div class="col-md-9">
   <input class="form-control" [name]="name" [formControlName]="formCtrlName">
</div>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看本教程:https : //scotch.io/tutorials/how-to-build-nested-model-driven-forms-in-angular-2


Sae*_*eed 5

您应该[formGroup]="signupForm"app-form-groupComponent中使用FormGroup .您可以使用此代码:

<div class="form-group" [formGroup]="signupForm">
  <label class="col-md-2 control-label">{{Name}}</label>
  <div class="col-md-9">
  <input class="form-control" [name]="name" [formControlName]="formCtrlName">
</div>
Run Code Online (Sandbox Code Playgroud)