Angular 4: не е намерена фабрика за компоненти,добавихте ли я към @NgModule.entryComponents?

Използвам Angular 4 шаблон с Webpack и имам тази грешка, когато се опитам да използвам компонент (ConfirmComponent):

Не е намерена фабрика за компоненти за ConfirmComponent. Добавихте ли го в @NgModule.entryComponents?

Компонентът е деклариран в app.module.server.ts

@NgModule({
  bootstrap: [ AppComponent ],
  imports: [
    // ...
  ],
  entryComponents: [
    ConfirmComponent,
  ],
})
Експорт на клас AppModule { }

Имам също така app.module.browser.ts и app.module.shared.ts

Как мога да поправя това?

Решение

Добавете това във вашия module.ts,

Декларации: [
  AppComponent,
  ConfirmComponent
]

ако ConfirmComponent е в друг модул, трябва да го експортирате там, за да можете да го използвате извън него, добавете:

exports: [ ConfirmComponent ]

В случай на динамично зареждан компонент и за да бъде генерирана ComponentFactory, компонентът трябва да бъде добавен и към entryComponents на модула:

Декларации: [
  AppComponent,
  ConfirmComponent
],
entryComponents: [ConfirmComponent],

съгласно дефиницията на entryComponents

Указва списък на компонентите, които трябва да бъдат компилирани, когато този модул е дефиниран. За всеки компонент, посочен тук, Angular ще създаде ComponentFactory и ще го съхрани в ComponentFactoryResolver.

Коментари (12)

Имах същия проблем. В този случай imports [...] е от решаващо значение, защото няма да работи, ако не импортирате NgbModalModule.

В описанието на грешката се казва, че компонентите трябва да се добавят в масива entryComponents и това е очевидно, но се уверете, че сте добавили този масив на първо място:

imports: [
    ...
    NgbModalModule,
    ...
  ],
Коментари (5)

ако използвате маршрутизация в приложението си

уверете се, че добавяте нови компоненти в пътя за маршрутизиране

например:

    const appRoutes: Routes = [
  { path: '', component: LoginComponent },
  { path: 'home', component: HomeComponent },
  { path: 'fundList',      component: FundListComponent },
];
Коментари (3)