角度错误:“无法绑定到'ngModel',因为它不是'input'的已知属性”


296

我正在使用Angular 4,但在控制台中遇到错误:

无法绑定到“ ngModel”,因为它不是“ input”的已知属性

我该如何解决?


28
您需要添加FormsModuleimports: []要使用的模块ngModel。否则,发布您的代码。
君特Zöchbauer

9
我不能认为所有新的Angular 2和4开发人员都会遇到这个确切的问题(包括我自己)。您上次使用Angular的时间是什么时候,不想在某处使用ngModel?我不明白....为什么FormsModule不仅仅包括默认
迈克·格莱德希尔

值得一提的是,在使用表单验证时,我在IONIC-4(4.11.0)中遇到了此错误。如果除了将formControlName =“ myControl”添加到窗体中任何地方的任何<ion-input>之外,我什么也不做,则会收到ngModel绑定错误消息。替代属性,例如formControlName1 =“ myControl”不会导致此错误。
Memetican '19

Answers:


674

为了对表单输入使用双向数据绑定,您需要FormsModule在Angular模块中导入包。

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

@NgModule({
    imports: [
         FormsModule      
    ]

编辑

由于存在很多相同问题的重复问题,因此我正在增强此答案。

有两个可能的原因

  • 缺少FormsModule,因此将其添加到您的模块中,

    import { FormsModule } from '@angular/forms';
    
    @NgModule({
        imports: [
            FormsModule      
        ]
  • 检查[(ngModel)]输入代码中的语法/拼写


27
ngModel和FormsModule之间是什么关系?但是,这对我不起作用。
Govind

4
FormsModule提供了有关表单元素的其他指令,包括输入,选择等。这就是为什么需要它的原因。不要忘记在声明您的组件包含表单元素绑定的模块中导入FormsModule。
鲍勃(Bob)

1
如果在组件ts文件中使用它,该怎么办?
Mike Warren

1
您不应导入component.ts内部
-Sajeetharan

@Sajeetharan如果我的组件中有一个模板,该模板在某些表单元素中使用ng-model怎么办?
CJBrew

18

这是一个正确的答案。您需要导入FormsMoudle

首先在app.module.ts中

**

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

**在app.component.spec.ts中排名第二

import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { FormsModule } from '@angular/forms';
describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        RouterTestingModule,
        FormsModule
      ],
      declarations: [
        AppComponent
      ],
    }).compileComponents();
  }));

最好的问候和希望会有所帮助


第二步,更改app.component.ts是否必要?
Konrad Viltersten

8

ngModel不工作,因为它还不是您的一部分NgModule

您必须告诉NgModule您您有权在ngModel整个应用程序中使用,可以通过将其添加FormsModuleapp.module.ts-> imports->中来实现[]

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

@NgModule({

   imports: [ FormsModule ],       // HERE

   declarations: [ AppComponent ],
   bootstrap: [ AppComponent ]
 })

7

使用Karma / Jasmine测试我的Angular 6应用程序时遇到了此错误。我已经FormsModule在顶层模块中导入了。但是,当我添加使用[(ngModel)]测试的新组件时,它开始失败。在这种情况下,我需要进口FormsModule的我TestBed TestingModule

beforeEach(async(() => {
  TestBed.configureTestingModule({
    imports: [
      FormsModule
    ],
    declarations: [
      RegisterComponent
    ]
  })
  .compileComponents();
}));

4

app.module.ts添加此:

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

@NgModule({
    declarations: [AppComponent],
    imports: [FormsModule],
})

6
该答案会为现有答案增加什么附加价值?
君特Zöchbauer

4
不会为答案添加任何值,并且代码格式错误。令初学者感到困惑。
ssmsnet

3
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Clijsters

4

上述所有解决问题的方法都是正确的。但是,如果您使用的是延迟加载,则FormsModule需要将其导入包含表单的子模块中。将其添加app.module.ts将无济于事。


3

在此处输入图片说明我尝试了上面提到的所有操作,但仍然无法正常工作。

但最终我在Angular站点中发现了问题。尝试在module.ts中导入formModule就是这样。 在此处输入图片说明



2

使用Angular 7.xx更新,在我的模块之一中遇到相同的问题。

如果它位于您的独立模块中,请添加以下额外模块:

import { CommonModule } from "@angular/common";
import { FormsModule } from "@angular/forms";

@NgModule({
  imports: [CommonModule, FormsModule], // the order can be random now;
  ...
})

如果位于中app.module.ts,请添加以下模块:

import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

@NgModule({
  imports:      [ FormsModule, BrowserModule ], // order can be random now
  ...
})

一个简单的演示来证明这种情况。


2

对我来说,答案是的拼写错误ngModel。我把它写成这样:ngModule虽然应该ngModel

其他所有尝试显然都无法为我解决错误。


是的,这也发生在我身上...模型!=模块为什么这在我的大脑中不起作用!
Rahul Sonwanshi

1

import { FormsModule } from '@angular/forms'; // <<<<将其导入此处

BrowserModule, FormsModule // <<<<和这里

因此,只需查找app.module.ts或其他模块文件,并确保已FormsModule导入...


1

就我而言,我添加了缺少的导入,即ReactiveFormsModule


1

在app.module.ts中导入表单模块。

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


@NgModule({
  declarations: [
    AppComponent,
    ContactsComponent
  ],
  imports: [
    BrowserModule,HttpModule,FormsModule     //Add here form  module
  ],
  providers: [],
  bootstrap: [AppComponent]
})

在html中:

<input type="text" name="last_name" [(ngModel)]="last_name" [ngModelOptions]="{standalone: true}" class="form-control">

我在html中使用了表格,并在app.madule.ts中导入了表格模块,例如-从“ @ angular / forms”导入{FormsModule},然后在导入中添加了FormsModule。
Brahmmeswara Rao Palepu '18

1

就我而言,我拼写错误,我指的是ngmodel而不是ng M odel :)希望能帮上忙!

预期-[(ngModel)]实际-[[ngmodel)]


1

如果双向绑定不起作用,则应验证以下内容。

在html中,应以这种方式调用ngModel。不依赖于输入元素的其他属性

<input [(ngModel)]="inputText">

确保FormsModule导入到模块文件中 app.modules.ts

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

@NgModule({
    declarations: [
        AppComponent,
        HomeComponent // suppose, this is the component in which you are trying to use two ay binding
    ],
    imports: [
        BrowserModule,
        FormsModule,
        // other modules
],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

确保在的声明中添加了您尝试使用ngModel进行双向绑定的组件。在上一点#2中添加的代码

这是使用ngModel进行双向绑定所需要做的所有工作,这已通过角度9验证。


0

如果要对表单输入使用双向数据绑定,则需要在Angular模块中导入FormsModule包。有关更多信息,请参见此处的Angular 2官方教程和表单的官方文档。

在app.module.ts中添加以下行:

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

[...]

@NgModule({
  imports: [
    [...]
    FormsModule
  ],
  [...]
})

0

首先导入FormsModule,然后在component.ts中使用ngModel

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

@NgModule({
 imports: [ 
            FormsModule  
          ];

HTML代码:

<input type='text' [(ngModel)] ="usertext" />

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.