Error no detectado: módulo inesperado 'FormsModule' declarado por el módulo 'AppModule'. Agregue una anotación @ Pipe / @ Directive / @ Component

97

Soy nuevo en Angular. Empecé Tour of Heroes para aprenderlo. Entonces, fui creado app.componentcon un two-wayenlace.

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'
    };
}

Siguiendo el tutorial, importé FormsModule y lo agregué a la matriz de declaraciones. Apareció un error en este paso:

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 { }

Aquí hay un error:

Error no detectado: módulo inesperado 'FormsModule' declarado por el módulo 'AppModule'. Agregue una anotación @ Pipe / @ Directive / @ Component.

Vlad Poltorin
fuente
11
Es un "módulo". Pertenece importsy nodeclarations
Neil Lunn

Respuestas:

260

FormsModuledebe agregarse en imports arraynot declarations array.

  • importaciones matriz es para la importación de módulos tales como BrowserModule, FormsModule,HttpModule
  • declaraciones de matrices es para su Components, Pipes,Directives

consulte a continuación el cambio:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
Pengyy
fuente
1
Gracias por la respuesta y la información. Eso ayudo.
Vlad Poltorin
9

Agregue la FormsModulematriz de importaciones.
es decir

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

O esto se puede hacer sin usar [(ngModel)]usando

<input [value]='hero.name' (input)='hero.name=$event.target.value' placeholder="name">

en vez de

<input [(ngModel)]="hero.name" placeholder="Name">
Praveen Ojha
fuente
4

Elimine FormsModule de la declaración: [] y agregue FormsModule en las importaciones: []

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

Fahim zuhair
fuente
Entonces, ¿qué agregó su respuesta que los demás no proporcionaron ya?
Noctis
0

Cosas que puedes agregar declarations: [] in modules

  • Tubo
  • Directiva
  • Componente

Consejo profesional : el mensaje de error lo explica:Please add a @Pipe/@Directive/@Component annotation.

Joshua Michael Waggoner
fuente