首页 > 解决方案 > ngControl [FormControl] Angular 6 没有提供者

问题描述

我正在学习 Angular。虽然官方教程对我来说效果很好,但我还是被 Reactive Forms 的“hello world”所困。我正在关注https://angular.io/guide/reactive-forms。我在另一个明智的工作项目中创建了一个新组件,以使用 ReactiveForm 创建一个输入文本框。模板html如下:

    <div>
        <label>
          Name:
          <input type="text" [formControl]="name">
        </label>
    </div>

组件类如下所示

import { Component, OnInit } from '@angular/core';
import {FormControl} from '@angular/forms';

@Component({
  selector: 'app-party-worker',
  templateUrl: './party-worker.component.html',
  styleUrls: ['./party-worker.component.scss']
})
export class PartyWorkerComponent implements OnInit {
  name = new FormControl('');
  constructor() { }
  ngOnInit() {
  }
}

浏览器中的错误是这样的。

Uncaught Error: Template parse errors:
No provider for NgControl ("
    <label>
      Name:
      [ERROR ->]<input type="text" [formControl]="name">
    </label>
  </div>"): ng:///ViewsModule/PartyWorkerComponent.html@3:6

是的,我已经导入了 ReactiveFormsModule。我的角度版本,如果显示ng --version如下

Angular CLI: 7.0.5
Node: 11.1.0
OS: darwin x64
Angular:
...

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.10.5
@angular-devkit/core         7.0.5
@angular-devkit/schematics   7.0.5
@schematics/angular          7.0.5
@schematics/update           0.10.5
rxjs                         6.3.3
typescript                   3.1.6

我不明白我做错了什么。任何帮助表示赞赏。

标签: angular

解决方案


要完成这项工作,您必须按照ReactiveFormsModule您的问题所建议@NgModule的那样导入。ViewsModuleAsFormControl是作为的一部分ReactiveFormsModule而不是FormsModule.

...
import { ReactiveFormsModule, ... } from '@angular/forms';

@NgModule({
  imports: [..., ReactiveFormsModule, ...],
  ...
})
export class ViewsModule {...}

推荐阅读