Angular 2:不能绑定到'ngModel',因为它不是'input'的已知属性

我正在尝试在Angular 2中实现dynamic表单。我已经为dynamic表单添加了“删除”和“取消”等附加function。 我已经按照这个文档: https : //angular.io/docs/ts/latest/cookbook/dynamic-form.html

在这里输入图像说明

我对代码做了一些修改。 我在这里得到错误。

我如何使这个错误去?

你可以在这里find完整的代码: http ://plnkr.co/edit/SL949g1hQQrnRUr1XXqt?p=preview,这是在plunker中工作,但不是在我的本地系统。

Html代码:

<div> <form [formGroup]="form"> <div *ngFor="let question of questions" class="form-row"> <label [attr.for]="question.key">{{question.label}}</label> <div [ngSwitch]="question.controlType"> <input *ngSwitchCase="'textbox'" [formControlName]="question.key" [id]="question.key" [type]="question.type" [(ngModel)]="question.value"> <select [id]="question.key" [(ngModel)]="question.value" *ngSwitchCase="'dropdown'" [formControlName]="question.key" > <option *ngFor="let opt of question.options" [ngValue]="opt.key" >{{opt.value}}</option> </select> <input *ngSwitchCase="'checkbox'" [(ngModel)]="question.value" [id]="question.key" [type]="question.type" (change)="question.value = ck.checked" #ck [ngModelOptions]="{standalone: true}"> </div> <div class="errorMessage" *ngIf="!form.controls[question.key].valid">{{question.label}} is required</div> </div> <div class="form-row"> <button type="submit" [disabled]="!form.valid" (click)="onSubmit()">Save</button> <button type="button" class="btn btn-default" (click)="cancel()">Cancel</button> <button type="button" class="btn btn-default" (click)="clear()">Clear</button> </div> </form> <div *ngIf="payLoad" class="form-row"> <strong>Saved the following values</strong><br>{{payLoad}} </div> </div> 

组件代码:

 import { Component, Input, OnInit } from '@angular/core'; import { FormGroup, REACTIVE_FORM_DIRECTIVES } from '@angular/forms'; import { QuestionBase } from './question-base'; import { QuestionControlService } from './question-control.service'; import { ControlGroup } from '@angular/common'; import {ChangeDetectorRef} from '@angular/core'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'dynamic-form', templateUrl: 'app/dynamicform/form.component.html', directives: [REACTIVE_FORM_DIRECTIVES], providers: [QuestionControlService] }) export class DynamicFormComponent implements OnInit { @Input() questions: QuestionBase<any>[] = []; form: FormGroup; payLoad:any; payLoad2:any; questiont: QuestionBase<any>; questiond: QuestionBase<any>; constructor(private qcs: QuestionControlService, private cdr: ChangeDetectorRef) { } ngOnInit() { this.form = this.qcs.toFormGroup(this.questions); console.log("Form Init",this.questions); this.questiont = JSON.parse(JSON.stringify(this.questions)); this.questiond = JSON.parse(JSON.stringify(this.questions)); } onSubmit() { this.payLoad = JSON.stringify(this.form.value); this.payLoad2=this.payLoad; this.questiont = JSON.parse(JSON.stringify(this.questions)); console.log("Submitted data",this.questions); } cancel(){ console.log("Canceled"); this.questions = JSON.parse(JSON.stringify(this.questiont)); } clear(){ this.questions = JSON.parse(JSON.stringify(this.questiond)); this.questiont = JSON.parse(JSON.stringify(this.questiond)); console.log("Cleared"); this.cdr.detectChanges(); } } 

在谷歌search中find这个解决scheme,像这样更新你的@NgModule代码:

 import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component'; @NgModule({ imports: [ BrowserModule, FormsModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { } 

来源: 不能绑定到“ngModel”,因为它不是“input”的已知属性

为了使ngModel在使用AppModules(NgModule)时能够工作,你必须在你的AppModule中导入FormsModule。

喜欢这个:

 import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component'; @NgModule({ declarations: [AppComponent], imports: [BrowserModule, FormsModule], bootstrap: [AppComponent] }) export class AppModule {} 

升级到RC5后我遇到了类似的错误; 即Angular 2:不能绑定到'ngModel',因为它不是'input'的已知属性。

Plunker上的代码展示了你使用Angular2 RC4,但是https://angular.io/docs/ts/latest/cookbook/dynamic-form.html中的示例代码使用了作为RC5一部分的NGModule。; NGModules是从RC4到RC5的突破性变革。

本页解释了从RC4到RC5的迁移: https : //angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html

我希望这能解决你所遇到的错误,并帮助你朝着正确的方向前进。

总之,我不得不在app.module.ts中创build一个NGModule:

 import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component'; @NgModule({ imports: [ BrowserModule, FormsModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { } 

然后,我改变main.ts使用模块:

 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app.module'; platformBrowserDynamic().bootstrapModule(AppModule); 

当然,我也需要更新package.json中的依赖关系。 这是我从package.json的依赖。 不可否认,我已经把它们从其他来源(也许是ng文档的例子)混合在一起,所以你的里程可能会有所不同:

 ... "dependencies": { "@angular/common": "2.0.0-rc.5", "@angular/compiler": "2.0.0-rc.5", "@angular/core": "2.0.0-rc.5", "@angular/forms": "0.3.0", "@angular/http": "2.0.0-rc.5", "@angular/platform-browser": "2.0.0-rc.5", "@angular/platform-browser-dynamic": "2.0.0-rc.5", "@angular/router": "3.0.0-rc.1", "@angular/router-deprecated": "2.0.0-rc.2", "@angular/upgrade": "2.0.0-rc.5", "systemjs": "0.19.27", "core-js": "^2.4.0", "reflect-metadata": "^0.1.3", "rxjs": "5.0.0-beta.6", "zone.js": "^0.6.12", "angular2-in-memory-web-api": "0.0.15", "bootstrap": "^3.3.6" }, ... 

我希望这有助于更好。 🙂

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

你也应该添加缺less的。

您需要将@ angular / forms依赖项导入到您的模块中。

如果您使用的是npm,请安装依赖项:

 npm install @angular/forms --save 

将其导入您的模块:

 import {FormsModule} from '@angular/forms'; @NgModule({ imports: [.., FormsModule,..], declarations: [......], bootstrap: [......] }) 

如果您使用SystemJs来加载模块

 '@angular/forms': 'node_modules/@angular/forms/bundles/forms.umd.js', 

现在你可以使用[(ngModel)]进行数据绑定了。

您需要在@NgModule装饰器中导入FormsModule,@NgModule存在于您的moduleName.module.ts文件中。

 import { FormsModule } from '@angular/forms'; @NgModule({ imports: [ BrowserModule, FormsModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) 

这个答案可能会帮助你,如果你使用噶:

我已经完全按照@ wmnitin的回答中提到的那样,但是错误总是在那里。 当使用“ng服务”而不是“业力开始”,它的工作!

为了能够使用'ngModule' ,需要将'FormsModule' (来自@angular/forms )添加到AppModule中的import[]数组(应该在CLI项目中默认存在)。