ngModel 在 Angular4 中不起作用

ngModel not working in Angular4

我正在从 official site and I came to the part with 2-way data binding through ngModel 学习 Angular 4。但是,只要我将 [(ngModel)] 添加到我的组件模板,我的应用程序就会停止工作,即使 FormsModule 已导入到 module.ts 文件中。组件未加载。
我正在使用 Visual Studio 代码。
这是我的 app.component.ts

import { Component } from '@angular/core';

    export class Hero {
      id: number;
      name: string;
    }



    @Component({
      selector: 'app',
      template: `
      <h1>{{ title }}</h1>
      <h2>{{hero.name}} details!</h2>
      <div><label>Id:</label> {{hero.id}} </div>
      <div>name:<input [(ngModel)]="hero.name" type="text"></div>
      `,
      styles:[`
        .selected{
          transition: padding 0.3s;
          color: mediumseagreen;
        }
      `]
    })

    export class AppComponent {
      title = 'Tour Of Heroes';

     hero:Hero = {
       id:1,
       name:"Mr. Invisible"
     };
    }  

这是应用程序。module.ts

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

    import { AppComponent, Hero } from './app.component';

    @NgModule({
      declarations: [
        AppComponent,
        FormsModule
      ],
      imports: [
        BrowserModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { } 

AppComponent 未加载,仅显示

正在加载...

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

    import { AppComponent, Hero } from './app.component';

    @NgModule({
      declarations: [
        AppComponent

      ],
      imports: [
        BrowserModule,
        FormsModule  // forms module should be in imports not in declarations
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { } 

除了模块声明的 imports 部分所需的 FormsModule 之外,您还必须使用 form 标记或 ngForm 指令来启用ngModel 功能。

Withoutou 也可以使用独立控件来使用ngModel像这样:

 <input [(ngModel)]="variable" #ctrl="ngModel" >

来源:Angular documentation

// add the import in module and add FormModule in import:
import { NgModule } from '@angular/core'
 imports: [
    BrowserModule,
   // add FormModule in import
    FormsModule
]
import { FormsModule } from '@angular/forms';

然后在 @NgModule(){imports:[FormsModule]} 与其他员工

正如其他人指出的那样,导入 FormsModule 很重要(例如在您的 app.module.ts 文件中。)在这个特定问题中,导入部分中缺少它。

但我添加这个答案是为了警告您一些我不时 运行 关注的事情。

如果您只是单独使用 ngModel,在某处没有表格,则不必为输入指定 name

<input ... [(ngModel)]="model.something"`>

但是当您在表单中使用它时,name 属性将成为必需的!

<form>
  <input ... name="something" [(ngModel)]="model.something"`>
</form>

它实际上在文档中:

When using the ngModel within tags, you'll also need to supply a name attribute so that the control can be registered with the parent form under that name.

如果你错过了它,它根本不会显示任何错误,它只是不起作用。

双向绑定

里面app.module.ts

从“@angular/forms”导入 {FormsModule};

进口:[ 表单模块 ],

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

请注意,如果您在自定义模块中存在的组件中使用 [(ngModel)],则必须将此行添加到您的 custom.module 而不是 app.module。

在这种情况下,将此行添加到 app.module 没有任何改变,您仍然会看到错误。

添加 import { NgModule } from '@angular/core';在 app-routing.module.ts 文件中。 确保 从'@angular/core'导入{NgModule}; 从'@angular/forms'导入{FormsModule};在 app.module.ts

可用

进口:[ 浏览器模块, 表单模块, AppRoutingModule]