Unghiulare 4: nici o fabrică de componente de găsit,nu-l adăugați la @NgModule.entryComponents?

Am'm folosind Unghiulare 4 șablon cu webpack si eu am aceasta eroare atunci când încercați să utilizați o componentă (ConfirmComponent):

Nici o fabrică de componente de găsit pentru ConfirmComponent. Ai adăuga la @NgModule.entryComponents?

Componenta este declarată în app.module.server.ts typescript @NgModule({ bootstrap: [ AppComponent ], importuri: [ // ... ], entryComponents: [ ConfirmComponent, ], }) export clasa AppModule { }

Am, de asemenea, app.module.browser-ul.ts " și " app.module.comună.ts`

Cum pot repara asta?

Comentarii la întrebare (5)
Soluția

Adăuga acest lucru în modul.ts`, typescript declarații: [ AppComponent, ConfirmComponent ] dacă ConfirmComponent este într-un alt modul, aveți nevoie pentru a exporta există, prin urmare, îl puteți folosi în afara, adauga: typescript exporturi: [ ConfirmComponent ]

În cazul unui încărcate dinamic component și pentru o ComponentFactory să fie generate, componenta trebuie să fie, de asemenea, adăugate la modulul entryComponents: typescript declarații: [ AppComponent, ConfirmComponent ], entryComponents: [ConfirmComponent],

în conformitate cu definiția de entryComponents

Specifica o lista de componente care ar trebui să fie compilate când acest modul este definit. Pentru fiecare componentă enumerate aici, Unghiulare va crea un ComponentFactory și depozitați-l în ComponentFactoryResolver.

Comentarii (12)

Vezi detalii despre entryComponent`:

Dacă încărcați orice component dinamic, atunci ai nevoie să-l pună în ambele declarații " și " entryComponent`:

typescript @NgModule({ importuri: [...], exporturi: [...], entryComponents: [ConfirmComponent,..], declarații: [ConfirmComponent,...], furnizori: [...] })

Comentarii (5)

TL;DR: UN serviciu în ng6 cu providedIn: "rădăcină"nu pot găsi ComponentFactory când Componenta nu este adăugat în aniientryComponents` de app.modulul de.

Această problemă poate apărea, de asemenea, dacă utilizați unghiulare 6 în combinație cu dinamic crearea unui Component într-un serviciu!

De exemplu, crearea unui Overlay:

``typescript @Injectabile({ providedIn: "rădăcină" }) export clasa OverlayService {

constructor(privat _overlay: Suprapunere) {}

openOverlay() { const overlayRef = acest lucru._createOverlay(); const portal = new ComponentPortal(OverlayExampleComponent);

overlayRef.atașați(portal).exemplu; } } `` Problema este

providedIn: "rădăcină"

definiție, care oferă acest serviciu în app.modulul de.

Deci, dacă serviciul este situat în, de exemplu, "OverlayModule", în cazul în care aveți, de asemenea, a declarat OverlayExampleComponent și-a adăugat la entryComponents, serviciul nu poate găsi ComponentFactory pentru OverlayExampleComponent.

Comentarii (4)

Am avut aceeasi problema. În acest caz, importul [...]este crucial, pentru că nu o't de lucru, dacă nu't importNgbModalModule`.

Descriere eroare spune că componente ar trebui să fie adăugate la entryComponents matrice și este evident, dar asigurați-vă că ați adăugat-o pe asta, în primul rând:

imports: [
    ...
    NgbModalModule,
    ...
  ],
Comentarii (5)

Adaugă componenta a entryComponents în @NgModule de aplicația's modul:

entryComponents:[ConfirmComponent],

precum și Declarații:

declarations: [
    AppComponent,
    ConfirmComponent
]
Comentarii (2)

Adăugați 'NgbModalModule' importurilor și componenta nume în entryComponents App.module.ts așa cum se arată mai jos

Comentarii (1)

Am aceeasi problema cu unghiulară 6, ca's ceea ce a lucrat pentru mine :

@NgModule({
...
entryComponents: [ConfirmComponent],
providers:[ConfirmService]

})

Dacă aveți un serviciu, cum ar fi ConfirmService, avea să declare la furnizorii de modul curent în loc de root

Comentarii (0)

Locul componente care sunt create în mod dinamic pentru a entryComponents sub @NgModuledecorator funcție.

@NgModule({
    imports: [
        FormsModule,
        CommonModule,
        DashbaordRoutingModule
    ],
    declarations: [
        MainComponent,
        TestDialog
    ],
    entryComponents: [
        TestDialog
    ]
})
Comentarii (2)

Am avut aceeasi problema pentru bootstrap modal

import { NgbModal } din '@ng-bootstrap/ng-bootstrap';

Dacă acesta este cazul dvs., trebuie doar să adăugați componenta modulul declarații și entryComponents ca alte răspunsuri sugerează, dar, de asemenea, adăuga acest la modul

import { NgbModule } din '@ng-bootstrap/ng-bootstrap';

imports: [
   NgbModule.forRoot(),
   ...
]
Comentarii (0)

Această eroare se produce atunci când încercați să încărcați un component dinamic și:

  1. Componenta doriți să încărcați nu este modul de rutare
  2. Componenta nu este în modul entryComponents.

în routingModule

const routes: Routes = [{ path: 'confirm-component', component: ConfirmComponent,data: {}}]

sau, în modul de

entryComponents: [
ConfirmComponent
} 

Pentru a rezolva această eroare, puteți adăuga un router la componenta sau adăugați-l la entryComponents de module.

  1. Adauga un router pentru a componentei.dezavantaj al acestei abordări este componenta va fi accesibil cu url-ul.
  2. Adăugați-l la entryComponents. în acest caz componenta dvs. nu va avea nici url-ul atașat și nu vor fi accesibile cu url-ul.
Comentarii (0)

Am avut aceeași problemă în Angular7 când am crea componente dinamice. Există două componente(TreatListComponent, MyTreatComponent) care trebuie să fie încărcate dinamic. Am adăugat doar entryComponents matrice în aplicația mea.module.ts fișier.

entryComponents: [
TreatListComponent,
MyTreatComponent

],

Comentarii (0)

dacă utilizați rutare în aplicație

asigurați-vă că Adăugați noi componente în calea de rutare

de exemplu :

    const appRoutes: Routes = [
  { path: '', component: LoginComponent },
  { path: 'home', component: HomeComponent },
  { path: 'fundList',      component: FundListComponent },
];
Comentarii (3)

Am fost obtinerea aceeasi problema cu ag-grid folosind componente dinamice. Am descoperit aveți nevoie să adăugați o componentă dinamică a ag-modul de rețea .withComponents[]

importuri: [ StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot(), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents(ProjectUpdateButtonComponent) ],

Comentarii (0)

În cazul meu am n't nevoie de entryComponents la toate - doar configurare de bază descrise în link-ul de mai jos, dar am nevoie pentru a include import, atât în app principal și modulul de la inchiderea modulului.

imports: [
    NgbModule.forRoot(),
    ...
]

https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c

Trebuie doar să adăugați-l la entryComponents dacă o componentă vor fi incluse în modal. Din documente:

puteți trece o componentă existentă ca și conținut de fereastra modal. În în acest caz, amintiți-vă pentru a adăuga componenta de conținut ca un entryComponents secțiunea de NgModule.

Comentarii (1)

Eroarea mea a fost de asteptare NgbModal metoda deschisă incorecte a parametrilor de .html

Comentarii (0)

Pentru clarificare aici. În cazul în care nu utilizați ComponentFactoryResolver direct în componentă, și doriți să rezumat la serviciu, care este apoi injectat in componenta trebuie să-l încarce sub furnizorii pentru modulul respectiv, deoarece în cazul în care încărcate leneș nu va't de lucru.

Comentarii (0)

În caz că încă mai au de eroare după furnizarea de componentei de dialog clasă în entryComponents, încercați să reporniți ng servi - ea a lucrat pentru mine.

Comentarii (0)