这种情况

我试图在我的Angular应用程序中创建一个非常简单的表单,但无论如何,它都无法工作。

Angular版本

Angular 2.0.0 RC5

这个错误

不能绑定到'formGroup'因为它不是'form'的已知属性

的代码

视图

<form [formGroup]="newTaskForm" (submit)="createNewTask()">
   <div class="form-group">
      <label for="name">Name</label>
      <input type="text" name="name" required>
   </div>
   <button type="submit" class="btn btn-default">Submit</button>
</form>

控制器

import { Component } from '@angular/core';
import { FormGroup, FormControl, Validators, FormBuilder }  from '@angular/forms';
import {FormsModule,ReactiveFormsModule} from '@angular/forms';
import { Task } from './task';

@Component({
    selector: 'task-add',
    templateUrl: 'app/task-add.component.html'

})
export class TaskAddComponent {

    newTaskForm: FormGroup;

    constructor(fb: FormBuilder)
    {
        this.newTaskForm = fb.group({
            name: ["", Validators.required]
        });
    }

    createNewTask()
    {
        console.log(this.newTaskForm.value)
    }
}

《ngModule

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule }   from '@angular/forms';

import { routing }        from './app.routing';
import { AppComponent }  from './app.component';
import { TaskService } from './task.service'

@NgModule({
    imports: [
        BrowserModule,
        routing,
        FormsModule
    ],
    declarations: [ AppComponent ],
    providers: [
        TaskService
    ],
    bootstrap: [ AppComponent ]
})
export class AppModule { }

这个问题

为什么会出现这个错误?我遗漏了什么吗?


当前回答

我在Angular 7中也遇到了同样的问题。只需在app.module.ts文件中导入following即可。

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

然后将FormsModule和ReactiveFormsModule添加到导入数组中。

imports: [
  FormsModule,
  ReactiveFormsModule
],

其他回答

请记住,如果你已经定义了“功能模块”,你需要在功能模块中导入,即使你已经导入到AppModule中。来自Angular文档:

模块不会继承对其他模块中声明的组件、指令或管道的访问权。AppModule导入的内容与ContactModule无关,反之亦然。在ContactComponent可以绑定[(ngModel)]之前,它的ContactModule必须导入FormsModule。

https://angular.io/docs/ts/latest/guide/ngmodule.html

使用并导入REACTIVE_FORM_DIRECTIVES:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AppComponent }  from './app.component';

@NgModule({
    imports: [
        BrowserModule,
        FormsModule,
        ReactiveFormsModule
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [AppComponent]
})

export class AppModule { }

我几乎尝试了这里所有的解决方案,但我的问题有点不同(愚蠢)。 我在路由模块中添加了组件,但没有包括它的主模块。 所以要确保你的组件是模块的一部分。

你的Angular版本是11+,你使用的是VisualStudioCode? 你已经导入了FormsModule, ReactiveFormsModule,并将其添加到app.module.ts的import -section中(相关模块可能不同,请选择正确的模块):

// app.module.ts (excerpt)
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
imports: [
  ...
  FormsModule,
  ReactiveFormsModule,
  ...
],

您有正确的导入(有时还有其他具有类似名称的库);您已经在组件中定义并初始化了表单吗?

// MyWonderfulComponent (excerpt)


import { FormBuilder, FormGroup, Validators } from '@angular/forms';

export class MyWonderfulComponent implements OnInit {
  form: FormGroup; 
  ...
  constructor (private fb: FormBuilder) {
    this.form = this.fb.group({
      // DON'T FORGET THE FORM INITIALISATION
    });
  }

你的组件模板有你的表单:

<form [formGroup]="form" (ngSubmit)="submit()">
  <!-- MY FORM CONTROLS ARE ALREADY HERE --> 
</form>

您仍然会收到错误消息“…因为它不是已知的……”?

然后只需简单地重新启动VisualStudioCode:)

该错误表示在此模块中无法识别FormGroup。因此,您必须在每个使用FormGroup的模块中导入这些(下面)模块

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

然后将FormsModule和ReactiveFormsModule添加到模块的imports数组中。

imports: [
  FormsModule,
  ReactiveFormsModule
],

你可能会想,我已经在AppModule中添加了它,它应该从它继承?但事实并非如此。因为这些模块导出的是必需的指令,而这些指令只能在导入模块中使用。在共享模块中阅读更多。

导致这些错误的其他因素可能是拼写错误,如下所示…

[FormGroup]="form"大写F而不是小写F

[formsGroup]="form" form后面多出的s