THE SITUATION:
请帮忙!我试图在我的Angular2应用程序中制作一个非常简单的形式,但不管它从不起作用 .
ANGULAR VERSION:
Angular 2.0.0 Rc5
THE ERROR:
Can't bind to 'formGroup' since it isn't a known property of 'form'
THE CODE:
风景:
<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 { }
THE QUESTION:
为什么我会收到这个错误?
我错过了什么吗?
12 回答
Can't bind to 'formGroup' since it isn't a known property of 'form'
意味着您尝试使用angular(
[prop]
)绑定属性,但角度无法找到他知道的任何元素(在本例中为form
) .这可以通过不使用正确的模块(在某处某处丢失导入)来实现,有时只会导致错误:
[formsGroup]
,s
后s
RC5 FIX
您需要在控制器中
import { REACTIVE_FORM_DIRECTIVES } from '@angular/forms'
并将其添加到@Component
中的directives
. 这将解决问题 .修复之后,您可能会收到另一个错误,因为您没有在表单中添加
formControlName="name"
到您的输入 .RC6/RC7/Final release FIX
要修复此错误,您只需要从模块中的
@angular/forms
导入ReactiveFormsModule
. 以下是ReactiveFormsModule
import的基本模块示例:为了进一步解释,
formGroup
是一个名为FormGroupDirective
的指令的选择器,它是ReactiveFormsModule
的一部分,因此需要导入它 . 它用于将现有FormGroup
绑定到DOM元素 . 您可以在Angular's official docs page上阅读更多相关信息 .好的经过一些挖掘后,我找到了“无法绑定到'formGroup'的解决方案,因为它不是'form'的已知属性 . ”
对于我的情况,我一直在使用多个模块文件,我在app.module.ts中添加了ReactiveFormsModule
但是当我使用另一个模块中添加的组件的[formGroup]指令时,这不起作用,例如使用在author.module.ts文件中订阅的author.component.ts中的[formGroup]:
我想如果我在app.module.ts中添加了ReactiveFormsModule,默认情况下ReactiveFormsModule将由其所有子模块继承,例如本例中的author.module ...(错误!) . 我需要在author.module.ts中导入ReactiveFormsModule,以使所有指令都能正常工作:
因此,如果您使用子模块,请确保在每个子模块文件中导入ReactiveFormsModule . 希望这有助于任何人 .
使用Angular 4时,建议的答案对我不起作用 . 相反,我必须使用attribute binding的另一种方式
attr
前缀:我在组件的单元测试期间遇到了这个错误(仅在测试期间,在应用程序中正常工作) . 解决方案是在
.spec.ts
文件中导入ReactiveFormsModule
:对于漫步这些线程的人来说这个错误 . 在我的情况下,我有一个共享模块,我只导出FormsModule和ReactiveFormsModule,忘了导入它 . 这导致了一个奇怪的错误,即formgroups在子组件中没有工作 . 希望这能帮助人们挠头 .
Angular 4与功能模块(例如,如果您使用共享模块)一起要求您也导出
ReactiveFormsModule
工作 .A LITTLE NOTE: Be careful about loaders and minimize (Rails env.):
看到这个错误并尝试了解决方案后,我意识到我的html加载器出了问题 .
我已经设置了我的Rails环境,以便使用此加载器成功导入组件的HTML路径(
config/loaders/html.js.
):经过几个小时的努力和无数的ReactiveFormsModule导入后,我看到我的
formGroup
是小写字母:formgroup
.这导致了我的加载器以及它在最小化时降低了我的HTML的事实 .
更改选项后,一切都按预期工作,我可以再次回去哭泣 .
我在尝试进行e2e测试时遇到了这个错误,这让我很生气,因为没有答案 .
如果您正在进行测试, *find your .specs.ts file 并添加:
由于缺少FormsModule,ReactiveFormsModule的导入而发生此问题 . 我也遇到了同样的问题 . 我的情况是差异 . 因为我正在使用模块 . 所以我在我的父模块中错过了上面的导入,虽然我已将其导入子模块,但它无法正常工作 .
然后我将它导入我的父模块,如下所示, it worked!
如果您有两个模块,那么添加如下
请记住,如果已定义"Feature Modules",则即使已导入
AppModule
,也需要在功能模块中导入 . 来自Angular文档:https://angular.io/docs/ts/latest/guide/ngmodule.html