Angular2 在构建简单表单时没有 ControlContainer 的提供者

Angular2 No provider for ControlContainer when building a simple form

这是我的表格:

app.component.html

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

app.component.ts

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

my-child-component:

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

错误:

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

如果我将输入移动到应用程序组件本身内部,它会起作用,但我的输入是在 child 组件中。

FORM_DIRECTIVESFORM_PROVIDERS 正在顶级应用程序级别注入。我完全按照他们的指导做了所有事情。

我也尝试将 FORM_DIRECTIVES 添加到 child 或 app.component 但没有成功。

您可以使用 ngFormControl 指令代替 ngControl 并将控制变量传递给子 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 指令

另见

或者,您可以通过将其添加到子组件声明来使用父级的现有表单。

viewProviders: [{provide: ControlContainer, useExisting: NgForm}]