2016-05-31 6 views
11

Questa è la mia forma:Angular2 Nessun provider per ControlContainer quando si costruisce una forma semplice

app.component:

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

classe app.component:

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

mio-figlio-componente :

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

Errore:

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

Se sposto l'ingresso all'interno del componente applicazione stessa che funzionerà, ma il mio ingresso è all'interno di un componente figlio.

FORM_DIRECTIVES e FORM_PROVIDERS vengono iniettati al livello di app principale, ho fatto esattamente tutto secondo le loro guide.

MODIFICA: Ho provato a aggiungere FORM_DIRECTIVES al figlio oa app.component, nessun successo.

risposta

8

È possibile utilizzare ngFormControl direttiva invece di ngControl e basta passare variabile di controllo in figlio Input come questo:

<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; 
} 

Vedi anche plunkr https://plnkr.co/edit/ydRAOmFG6FU6lxTonWzj?p=preview

direttiva NgControl è richiesto il tag modulo all'interno del modello figlio

Vedi anche

+0

Grazie, questo ha risolto il problema, ma si può spiegare quello che è veramente il problema qui? –

+0

ngControl è richiesto un tag del modulo padre all'interno del modello (Bambino -> modello) – yurzui

+0

non capisco perché questo lo risolva. – FlavorScape