这种情况

我试图在我的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 { }

这个问题

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


当前回答

我也有同样的问题。确保如果使用子模块(例如,你不仅有app.component.module.ts),而且有一个单独的组件,如login.module。在这个login.module.ts导入中包含ReactiveFormsModule导入,这样它才能工作。我甚至不需要在我的app.component.module中导入ReactiveFormsModule,因为我使用了所有的子模块。

文件login.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

import { IonicModule } from '@ionic/angular';

import { LoginPageRoutingModule } from './login-routing.module';

import { LoginPage } from './login.page';

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    ReactiveFormsModule,
    IonicModule,
    LoginPageRoutingModule
  ],
  declarations: [LoginPage]
})
export class LoginPageModule {}

其他回答

如果遇到这类问题,我们必须关注三个要点。

导入ReactiveFormsModule, FormsModule在任何共享或应用模块。 如果创建了共享模块,则将其导入正在使用表单组和的模块中 检查该组件是否已插入 像这样声明:[ProjectComponent]。

RC6/RC7/最终版本FIX

要修复这个错误,你只需要从模块中的@angular/forms导入ReactiveFormsModule。下面是一个导入ReactiveFormsModule的基本模块的例子:

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

为了进一步解释,formGroup是一个名为FormGroupDirective的指令的选择器,它是ReactiveFormsModule的一部分,因此需要导入它。它用于将现有的FormGroup绑定到DOM元素。你可以在Angular的官方文档页面上阅读更多信息。

RC5修复

你需要从控制器中的@angular/forms中导入{REACTIVE_FORM_DIRECTIVES},并将其添加到@Component中的指令中。这样问题就解决了。

在你修复了这个问题之后,你可能会得到另一个错误,因为你没有在表单中添加formControlName="name"到你的输入中。

对于浏览这些线程的人来说。在我的情况下,我有一个共享模块,我只导出FormsModule和ReactiveFormsModule,忘记导入它。这导致了一个奇怪的错误,即表单组在子组件中不起作用。希望这能帮助那些摸不着头脑的人。

在过去的3天里,我一直在与这个错误作斗争。我添加了ReactiveFormsModule和FormsModule,如上所述,在我的两个模块的评论中,但它没有任何效果,直到我用另一个“ng serve”重新加载我的项目。 我不知道为什么它没有自动重载,但至少我很高兴它终于工作了! 请解释一下好吗?

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

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

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

imports: [
  FormsModule,
  ReactiveFormsModule
],

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

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

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

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