我的组件中有一个简单的输入,它使用[(ngModel)]:

<input type="text" [(ngModel)]="test" placeholder="foo" />

当我启动应用程序时,即使没有显示组件,也会出现以下错误。

zone.js:461未处理的Promise拒绝:模板解析错误:无法绑定到“ngModel”,因为它不是“input”的已知属性。

以下是组件。ts:

import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Intervention } from '../../model/intervention';

@Component({
   selector: 'intervention-details',
   templateUrl: 'app/intervention/details/intervention.details.html',
   styleUrls: ['app/intervention/details/intervention.details.css']
})
    
export class InterventionDetails
{
   @Input() intervention: Intervention;
    
   public test : string = "toto";
}

当前回答

即使在功能模块中直接或间接导入FormsModule(例如,从共享模块),如果导入的组件未在声明中声明,也会发生此错误:

我参加了Deborah Kurata的Angular Routing课程。当我在Angular Route的组件属性上添加导入的组件ProductEditInfoComponent时,我忘记在声明属性上添加ProductEditInfoComponent。

在声明属性上添加ProductEditInfoComponent将解决NG8002:无法绑定到“ngModel”,因为它不是“input”的已知属性。问题:

其他回答

我从RC1升级到RC5并收到此错误。

我完成了迁移(引入了一个新的app.module.ts文件,将package.json更改为包含新版本和缺失的模块,最后根据Angular2快速启动示例将main.ts更改为相应的引导)。

我做了一次npm更新,然后做了一个npm过时,以确认安装的版本是正确的,但仍然没有运气。

我最终彻底删除了node_modules文件夹,并重新安装了npm install-瞧!问题已解决。

ngModel来自FormsModule。在某些情况下,您可能会收到此类错误:

您没有将FormsModule导入到声明组件的模块导入数组中,即使用ngModel的组件。您已经将FormsModule导入一个模块,该模块继承了另一个模块。在这种情况下,您有两个选项:

让FormsModule从两个模块(module1和module2)导入导入数组。通常:导入模块不会提供对其导入模块的访问权限。(导入不继承)将FormsModule声明到module1中的导入和导出数组中,以便能够在model2中看到它

(在某些版本中,我遇到了这个问题)您正确导入了FormsModule,但问题出在输入HTML标记上。必须为输入添加name标记属性,[(ngModel)]中的对象绑定名称必须与name属性中的名称相同

我使用的是Angular 5。

在我的情况下,我也需要导入ReactiveFormsModule。

文件app.module.ts(或anymodule.module.ts):

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

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    ReactiveFormsModule
  ],

对于Angular 2的任何版本,您都需要在app.module.ts文件中导入FormsModule,它将解决此问题。

确保[(ngModel)]实际拼写为“ngModel”,大写为M。我花了几分钟没看到这个