2017-09-27 42 views
3

我使用分量附加form输入领域中使用 -角4 - 错误:formControlName必须与父母formGroup指令

发动机加载接触form.html

<form (ngSubmit)="onSubmit()" [formGroup]="contact_form"> 
<md-tab-group> 
    <md-tab label="Form"> 
     <ang-form></ang-form> 
    </md-tab> 
    <md-tab label="Email"> 
     <ang-email></ang-email> 
    </md-tab> 
    <md-tab label="Message"> 
     <ang-message></ang-message> 
    </md-tab> 
</md-tab-group> 
<button md-raised-button type="submit">Publish</button> 

ang-form.html

<div class="form-grid form-title"> 
    <md-input-container> 
     <input formControlName="contact_form_title" 
     class="form-title-field" mdInput placeholder="Title" value=""> 
    </md-input-container> 
</div> 

使用相同的方式我添加了其他组件(ang-email ang-message)html。

我在engine-add-form.ts

export class EngineAddFormComponent{ 

contact_form: any; 

form_value: any; 

constructor(){ 
    this.contact_form = new FormGroup({ 
     contact_form_title: new FormControl('', Validators.minLength(2)), 
     ........ 
     ........ 
    }); 
} 
onSubmit(){ 
    this.form_value = JSON.stringify(this.contact_form.value); 
    console.log(this.form_value); 
} 
} 

添加[formGroup]指令我获得以下错误 -

Error: 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).

我不明白什么是错我的代码。

+0

您需要在'ang-form.html'中使用'formGroup'指令或者使用'formControl'指令来代替'formControlName' – yurzui

+0

这里'ang-form'是一个子组件。但我的'formGroup'指令在父组件内。所以我认为'formControl'指令是我的解决方案。你可以给任何'formControl'指令的工作文档吗? – user3384985

回答

4

您必须通过formGroup(在年情况CONTACT_FORM)到子组分,它是ANG-形式

发动机加载接触form.html(经修饰)

<form (ngSubmit)="onSubmit()" [formGroup]="contact_form"> 
<md-tab-group> 
    <md-tab label="Form"> 
     <ang-form [group]="contact_form"></ang-form> 
    </md-tab> 
    <md-tab label="Email"> 
     <ang-email></ang-email>`` 
    </md-tab> 
    <md-tab label="Message"> 
     <ang-message></ang-message> 
    </md-tab> 
</md-tab-group> 
<button md-raised-button type="submit">Publish</button> 

ANG-form.html(经修饰)

<div class="form-grid form-title" [formGroup]="group"> 
    <md-input-container> 
     <input formControlName="contact_form_title" 
     class="form-title-field" mdInput placeholder="Title" value=""> 
    </md-input-container> 
</div> 

Add @Input() group: FormGroup; in your ang-form.component.ts

2

有很多这样做的选择。

这里是例如使用formControl指令和角DI系统:

@Component({ 
    selector: 'ang-form', 
    template: ` 
    <input [formControl]="control"> 
    ` 
}) 
export class AngForm { 
    control: FormControl; 

    constructor(private formGroupDir: FormGroupDirective) {} 

    ngOnInit() { 
    this.control = this.formGroupDir.control.get('contact_form_title') as FormControl; 
    } 
} 

Stackblitz Example

更多的例子参见

+0

哇,另一个很好的解决方案。 – user3384985

相关问题