这种情况

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

这个问题

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


当前回答

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

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]
})

其他回答

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

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

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

这个问题是由于缺少FormsModule,ReactiveFormsModule的导入。我也遇到了同样的问题。 我的情况是不同的,因为我是与模块工作。所以我错过了上面的导入在我的父模块,虽然我已经导入到子模块,它不工作。

然后我导入它到我的父模块如下,它工作!

import { ReactiveFormsModule,FormsModule  } from '@angular/forms';
import { AlertModule } from 'ngx-bootstrap';

         @NgModule({
          imports: [
            CommonModule,
            FormsModule,
            ReactiveFormsModule,
    ],
      declarations: [MyComponent]
    })

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

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

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

ReactiveFormsModule和FormsModule导入应该添加到您的自定义组件模块中,以及调用它的父组件中。

例如,我需要为过滤器组件添加表单。所以我应该在我的过滤器模块和它的父页面(可能是列表)模块中添加这个导入,从这个过滤器按钮被单击的地方开始。

我在一个组件的单元测试期间遇到过这个错误(只是在测试期间,在应用程序中它正常工作)。解决方案是在.spec中导入ReactiveFormsModule。ts文件:

// Import module
import { ReactiveFormsModule } from '@angular/forms';

describe('MyComponent', () => {
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [MyComponent],
            imports: [ReactiveFormsModule],  // Also add it to 'imports' array
        })
        .compileComponents();
    }));
});