Uncaught Error: Неожиданный модуль "FormsModule", объявленный модулем "AppModule". Добавьте примечание @Pipe/@Directive/@Component
Я новичок в Angular. Я начал Tour of Heroes, чтобы узнать его.
Итак, я создал привязку app.component
с two-way
.
import { Component } from '@angular/core';
export class Hero {
id: number;
name: string;
}
@Component({
selector: 'app-root',
template: `
<h1>{{title}}</h1>
<h2>{{hero.name}} details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div><label>Name: </label>
<input [(ngModel)]="hero.name" placeholder="Name">
</div>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'Tour of Heroes';
hero: Hero = {
id: 1,
name: 'Windstorm'
};
}
После учебника я импортировал FormsModule и добавил его в массив объявлений. На этом этапе появилась ошибка:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { FormsModule } from '@angular/forms';
@NgModule({
declarations: [
AppComponent,
FormsModule
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Вот ошибка:
Неподготовленная ошибка: неожиданный модуль "FormsModule", объявленный модулем "AppModule". Добавьте примечание @Pipe/@Directive/@Component.
Ответы
Ответ 1
FormsModule
следует добавить в imports array
not declarations array
.
- import array предназначен для импорта таких модулей, как
BrowserModule
, FormsModule
, HttpModule
- массив объявлений предназначен для
Components
, Pipes
, Directives
см. ниже изменение:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
Ответ 2
Добавьте FormsModule
в массив импорта.
i.e
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
Или это можно сделать без использования [(ngModel)]
с помощью
<input [value]='hero.name' (input)='hero.name=$event.target.value' placeholder="name">
вместо
<input [(ngModel)]="hero.name" placeholder="Name">
Ответ 3
Удалите FormsModule из объявления: [] и добавьте FormsModule в импорт: []
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})