2016-05-31 14 views
11

を構築する際にこれが私のフォームでControlContainerためAngular2ないプロバイダ:簡単なフォーム

app.component:

<form [ngFormModel]="myForm"> 
     <my-child-component></my-child-component> 
    </form>  

app.componentクラス:

constructor (private _formBuilder : FormBuilder) { 
    this.myForm = _formBuilder.group({ 
     firstName : ["",Validators.required] 
    }); 
} 

私の子成分:

 <input type="text" ngControl="firstName"> 

エラー:

No provider for ControlContainer 
    [ERROR ->]<md-input 
      ngControl="firstName" 
      placeholder="First name"> 

入力をアプリケーションコンポーネント自体の内部に移動しても機能しますが、入力は子コンポーネント内にあります。

トップレベルのアプリレベルでFORM_DIRECTIVESとFORM_PROVIDERSが注入されていますが、ガイドごとにすべてを行っています。

EDIT: FORM_DIRECTIVESを子またはapp.componentに追加しようとしましたが、成功しませんでした。

答えて

8

かわりngControlngFormControlディレクティブを使用し、ちょうどこのように子Inputに制御変数を渡すことができます。

<form [ngFormModel]="myForm"> 
    <my-child-component [control]="myForm.controls.firstName"></my-child-component> 
</form> 

Child.component

@Component({ 
    selector: 'my-child-component', 
    template: ` 
    <input type="text" [ngFormControl]="control"> 
    `, 
    directives: [FORM_DIRECTIVES] 
}) 
export class Child { 
    @Input() control: Control; 
} 

も参照してくださいplunkr https://plnkr.co/edit/ydRAOmFG6FU6lxTonWzj?p=preview

NgControlディレクティブ子テンプレート内にformタグが必要です

も参照してください

+0

おかげで、この問題は解決していますが、ここでは本当に問題で何を説明してくださいできますか? –

+0

ngControlが必要ですテンプレート内の親フォームタグ(子 - >テンプレート) – yurzui

+0

は、これがなぜこれを修正するのかよくわかりません。 – FlavorScape

関連する問題