Ich verwende die Angular 4-Vorlage mit Webpack und habe diesen Fehler, wenn ich versuche, eine Komponente (ConfirmComponent) zu verwenden:
Für ConfirmComponent wurde keine Komponentenfactory gefunden. Haben Sie es zu @ NgModule.entryComponents hinzugefügt?
Die Komponente ist in deklariert app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
Ich habe auch app.module.browser.ts
undapp.module.shared.ts
Wie kann ich das beheben?
ConfirmComponent
die Details verwenden, reicht nicht aus, um Ihre Frage zu beantwortenAntworten:
Fügen Sie dies in Ihre
module.ts
,Wenn sich ConfirmComponent in einem anderen Modul befindet, müssen Sie es dort exportieren, damit Sie es außerhalb verwenden können. Fügen Sie Folgendes hinzu:
--- Aktualisiere Angular 9 oder Angular 8 mit explizit aktiviertem Ivy ---
Einstiegskomponenten mit Efeu werden nicht mehr benötigt und sind jetzt veraltet
--- für Winkel 9 und 8 mit deaktiviertem Efeu ---
Bei einer dynamisch geladenen Komponente und damit eine ComponentFactory generiert werden kann, muss die Komponente auch zu den entryComponents des Moduls hinzugefügt werden:
gemäß der Definition von entryComponents
quelle
Siehe die Details über
entryComponent
:Wenn Sie eine Komponente dynamisch laden, müssen Sie sie in beide
declarations
undentryComponent
:quelle
entryComponents
war die Lösung - danke!entryComponents
noch das Hinzufügen zuexports
hat bei mir funktioniert. ABER ich kann die ModalComponent von einigen anderen Komponenten aufrufen, die keine Enkelkinder sindTL; DR: Ein Dienst in NG6 mit
providedIn: "root"
kann die Component nicht finden , wenn die Komponente nicht in der addierteentryComponents
von app.module .Dieses Problem kann auch auftreten, wenn Sie Winkel 6 in Kombination mit der dynamischen Erstellung einer Komponente in einem Dienst verwenden!
Beispiel: Erstellen einer Überlagerung:
Das Problem ist das
Definition, die diesen Dienst in app.module bereitstellt .
Befindet sich Ihr Dienst beispielsweise im "OverlayModule", in dem Sie auch die OverlayExampleComponent deklariert und zu den entryComponents hinzugefügt haben, kann der Dienst die ComponentFactory für OverlayExampleComponent nicht finden.
quelle
providedIn
indem dieproviders
Option auf dem Modul entfernt und stattdessen verwendet wird.Ich hatte das gleiche Problem. In diesem Fall
imports [...]
ist dies von entscheidender Bedeutung, da es nicht funktioniert, wenn Sie nicht importierenNgbModalModule
.Die Fehlerbeschreibung besagt, dass Komponenten zum
entryComponents
Array hinzugefügt werden sollten, und es ist offensichtlich, aber stellen Sie sicher, dass Sie diese zuerst hinzugefügt haben:quelle
Fügen Sie diese Komponente zu entryComponents in @NgModule des Moduls Ihrer App hinzu:
sowie Erklärungen:
quelle
entryComponents
noch das Hinzufügen zuexports
hat bei mir funktioniert. ABER ich kann die ModalComponent von einigen anderen Komponenten aufrufen, die keine Enkelkinder sindFügen Sie 'NgbModalModule' in Importen und Ihren Komponentennamen in entryComponents App.module.ts hinzu, wie unten gezeigt
quelle
entryComponents
noch das Hinzufügen zuexports
hat bei mir funktioniert. ABER ich kann die ModalComponent von einigen anderen Komponenten aufrufen, die keine Enkelkinder sindPlatzieren Sie Komponenten, die dynamisch erstellt werden, in entryComponents unter der Funktion @NgModuledecorator.
quelle
entryComponents
dem jeweiligen ng-Modul hinzugefügt werden, für das er deklariert ist.entryComponents
noch das Hinzufügen zuexports
hat bei mir funktioniert. ABER ich kann die ModalComponent von einigen anderen Komponenten aufrufen, die keine Enkelkinder sindIch habe das gleiche Problem mit Winkel 6, das hat bei mir funktioniert:
Wenn Sie einen Dienst wie ConfirmService haben, müssen Sie diesen bei Anbietern des aktuellen Moduls anstelle von root deklarieren
quelle
Ich hatte das gleiche Problem für Bootstrap Modal
Wenn dies der Fall ist, fügen Sie die Komponente einfach zu den Moduldeklarationen und entryComponents hinzu, wie andere Antworten vorschlagen, und fügen Sie dies auch Ihrem Modul hinzu
quelle
Dieser Fehler tritt auf, wenn Sie versuchen, eine Komponente dynamisch zu laden, und:
in routingModule
oder im Modul
Um diesen Fehler zu beheben, können Sie der Komponente einen Router hinzufügen oder ihn zu entryComponents des Moduls hinzufügen.
quelle
Ich hatte das gleiche Problem in Angular7, als ich dynamische Komponenten erstellte. Es gibt zwei Komponenten (TreatListComponent, MyTreatComponent), die dynamisch geladen werden müssen. Ich habe gerade das Array entryComponents zu meiner Datei app.module.ts hinzugefügt.
quelle
wenn Sie in Ihrer Anwendung Routing verwenden
zum Beispiel :
quelle
In meinem Fall brauchte ich überhaupt keine entryComponents - nur die Grundeinstellung, wie im folgenden Link beschrieben, aber ich musste den Import sowohl in das Haupt-App-Modul als auch in das umschließende Modul aufnehmen.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Sie müssen es nur zu entryComponents hinzufügen, wenn eine Komponente im Modal enthalten sein soll. Aus den Dokumenten:
quelle
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
mit Winkel 8Ich hatte das gleiche Problem mit ag-grid mit dynamischen Komponenten. Ich habe festgestellt, dass Sie die dynamische Komponente zum ag-grid-Modul hinzufügen müssen .withComponents []
Importe: [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot (), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonComponent) ],
quelle
In meinem Fall habe ich vergessen
MatDialogModule
, Importe in einem untergeordneten Modul hinzuzufügen .quelle
Zur Verdeutlichung hier.
ComponentFactoryResolver
Wenn Sie die Komponente nicht direkt verwenden und sie in den Dienst abstrahieren möchten, der dann in die Komponente eingefügt wird, müssen Sie sie unter den Anbietern für dieses Modul laden, da sie bei verzögertem Laden nicht funktioniert.quelle
Falls Sie nach dem Bereitstellen der Komponentendialogklasse immer noch den Fehler haben
entryComponents
, versuchen Sie einen Neustartng serve
- es hat bei mir funktioniert.quelle
Mein Fehler war das Aufrufen der offenen NgbModal-Methode mit falschen Parametern aus .html
quelle
Sie sollten das
NgbModule
im Modul folgendermaßen importieren :quelle
entryComponents
es ist lebenswichtig. Die obigen Antworten hierzu sind richtig.Aber...
providedIn: 'root'
zuprovidedIn: MyModule
. Als allgemeine bewährte Methode sollten Sie nur dieprovidedIn: SomeModule
für alle Dialogdienste verwenden, die sich in Modulen befinden.quelle
Ich verwende Angular8 und versuche, die Komponente dynamisch aus einem anderen Modul zu öffnen. In diesem Fall müssen Sie
import the module
in das Modul, das die Komponente öffnen möchte, natürlich zusätzlich zurexport
Komponente und sie in dasentryComponents
Array eintragen wie die vorherigen Antworten.quelle
In meinem Fall habe ich dieses Problem gelöst durch:
1) Platzieren
NgxMaterialTimepickerModule
inapp module imports:[ ]
2) Platzieren
NgxMaterialTimepickerModule
intestmodule.ts imports:[ ]
3) Platzieren
testcomponent
indeclartions:[ ]
undentryComponents:[ ]
(Ich benutze Angular 8+ Version)
quelle
Deklarieren Sie alle neuen Seiten in app.module
quelle