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?
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.
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: [...] })
TL;DR: UN serviciu în ng6 cu providedIn: "rădăcină"nu pot găsi ComponentFactory când Componenta nu este adăugat în anii
entryComponents` 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.
Am avut aceeasi problema. În acest caz, importul [...]este crucial, pentru că nu o't de lucru, dacă nu't import
NgbModalModule`.
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,
...
],
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
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
]
})
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(),
...
]
Această eroare se produce atunci când încercați să încărcați un component dinamic și:
î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.
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
],
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 },
];
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) ],
Î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.
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.