这种情况

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

这个问题

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


当前回答

好的,经过一些挖掘,我找到了一个解决方案“不能绑定到‘formGroup’,因为它不是一个已知的‘形式’属性。”

对于我的情况,我一直在使用多个模块文件,我在app.module.ts中添加了ReactiveFormsModule

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

@NgModule({
  declarations: [
    AppComponent,
  ]
  imports: [
    FormsModule,
    ReactiveFormsModule,
    AuthorModule,
],
...

但是当我从添加到另一个模块的组件中使用[formGroup]指令时,这就不起作用了,例如在author.module.ts文件中订阅的author.component.ts中使用[formGroup]:

import { NgModule }       from '@angular/core';
import { CommonModule }   from '@angular/common';
import { AuthorComponent } from './author.component';

@NgModule({
  imports: [
    CommonModule,
  ],
  declarations: [
    AuthorComponent,
  ],
  providers: [...]
})

export class AuthorModule {}

我想如果我在app.module中添加ReactiveFormsModule。默认情况下,ReactiveFormsModule将被它的所有子模块继承,比如author。模块在这种情况下…(错误的)。 我需要在author.module.ts中导入ReactiveFormsModule,以使所有指令都能工作:

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

@NgModule({
  imports: [
    ...,
    FormsModule,    //added here too
    ReactiveFormsModule //added here too
  ],
  declarations: [...],
  providers: [...]
})

export class AuthorModule {}

因此,如果您正在使用子模块,请确保在每个子模块文件中导入ReactiveFormsModule。

其他回答

如果正确导入了FormModule和ReactiveFormModule,可能会出现另一个问题。也许你没有将你的组件添加到app模块的模块声明中。所以把你的组件添加到app.module.ts声明中:

@NgModule({
  declarations: [
    YourNewComponent
  ]
})

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

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

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

我也有同样的问题,问题实际上只是我忘记导入和声明在模块中保存表单的组件:

import { ContactFormComponent } from './contact-form/contact-form.component';

@NgModule({
    declarations: [..., ContactFormComponent, ...],
    imports: [CommonModule, HomeRoutingModule, SharedModule]
})
export class HomeModule {}

如果你必须导入两个模块,然后像下面这样添加

import {ReactiveFormsModule,FormsModule} from '@angular/forms';
@NgModule({
  declarations: [
    AppComponent,
    HomeComponentComponent,
    BlogComponentComponent,
    ContactComponentComponent,
    HeaderComponentComponent,
    FooterComponentComponent,
    RegisterComponent,
    LoginComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    routes,
    ReactiveFormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})