104 votes

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

Je suis nouveau dans Angulaire. J'ai commencé la Tournée des Héros de l'apprendre. Je suis donc créé un app.component avec two-way de la liaison.

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

Suivant le tutoriel j'ai importé FormsModule et de l'ajouter dans les déclarations de tableau. L'erreur est apparue lors de 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:

Uncaught Error: Unexpected module "FormsModule" déclarée par le module "AppModule'. S'il vous plaît ajouter un @Pipe/@Directive/@Composant d'annotation.

277voto

Pengyy Points 21772

FormsModule devrait être ajouté à imports array pas declarations array .

  • Le tableau imports permet d'importer des modules tels que BrowserModule , FormsModule , HttpModule
  • Le tableau de déclarations est pour votre Components , Pipes , Directives

reportez-vous ci-dessous changement:

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

9voto

Praveen Ojha Points 426

Ajoutez FormsModule dans 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">
 

4voto

Fahim zuhair Points 13

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

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

 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X