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" >
// 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]
我正在从 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" >
// 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]