Неперехваченная ошибка: непредвиденный модуль FormsModule, объявленный модулем AppModule. Добавьте аннотацию @ Pipe / @ Directive / @ Component

97

Я новичок в Angular. Я начал "Тур героев", чтобы изучить его. Итак, я создал файл 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.

Влад Полторин
источник
11
Это «модуль». Он принадлежит, importsа неdeclarations
Нил Ланн

Ответы:

261

FormsModuleследует добавить в imports arrayнет declarations array.

  • импорт массив для импорта модулей , такие как BrowserModule, FormsModule,HttpModule
  • декларации массив для вашего Components, Pipes,Directives

см. изменение ниже:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
Pengyy
источник
1
Спасибо за ответ и информацию. Это помогло.
Влад Полторин
9

Добавить FormsModuleв массив импорта.
т.е.

@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">
Правин Оджха
источник
4

Удалите FormsModule из объявления: [] и добавьте FormsModule в импорт: []

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

Фахим Зухаир
источник
Итак, что ваш ответ добавил, чего другие еще не предоставили?
Ноктис
0

Вещи, которые можно добавить declarations: [] in modules

  • Труба
  • Директива
  • Составная часть

Совет профессионала : сообщение об ошибке объясняет это -Please add a @Pipe/@Directive/@Component annotation.

Джошуа Майкл Ваггонер
источник