Erreur non interceptée: module 'FormsModule' inattendu déclaré par le module 'AppModule'. Veuillez ajouter une annotation @ Pipe / @ Directive / @ Component

97

Je suis nouveau dans Angular. J'ai commencé Tour of Heroes pour l'apprendre. Donc, je suis créé app.componentavec une two-wayliaison.

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

Suite au tutoriel, j'ai importé FormsModule et l'ai ajouté dans un tableau de déclarations. Une erreur est apparue à cette étape:

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

Voici l'erreur:

Erreur non interceptée: module 'FormsModule' inattendu déclaré par le module 'AppModule'. Veuillez ajouter une annotation @ Pipe / @ Directive / @ Component.

Vlad Poltorin
la source
11
C'est un "module". Il appartient à importset pasdeclarations
Neil Lunn

Réponses:

261

FormsModuledevrait être ajouté à imports arraynon declarations array.

  • tableau des importations est pour importer des modules tels que BrowserModule, FormsModule,HttpModule
  • tableau des déclarations est pour votre Components, Pipes,Directives

voir ci-dessous le changement:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
Pengyy
la source
1
Merci pour la réponse et les informations. Ça m'a aidé.
Vlad Poltorin du
9

Ajouter FormsModuledans le tableau des importations.
c'est à dire

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

Ou cela peut être fait sans utiliser [(ngModel)]en utilisant

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

au lieu de

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

Supprimez le FormsModule de la déclaration: [] et ajoutez le FormsModule dans les importations: []

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

Fahim zuhair
la source
Alors, qu'a ajouté votre réponse que les autres n'ont pas déjà fourni?
Noctis
0

Éléments auxquels vous pouvez ajouter declarations: [] in modules

  • Tuyau
  • Directif
  • Composant

Conseil de pro : le message d'erreur l'explique -Please add a @Pipe/@Directive/@Component annotation.

Joshua Michael Wagoner
la source