Ich arbeite an einer Ionic
App ( 2.0.0-rc0
), die davon abhängt angular 2
. So ist die Neueinführung von ngModules
enthalten. Ich füge meine app.module.ts.
unten hinzu.
import { NgModule } from '@angular/core';
import { IonicApp, IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import { Users } from '../pages/users/users';
@NgModule({
declarations: [
MyApp,
Users
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
Users
]
})
export class AppModule {}
Was macht entryComponents
hier? Components
sind bereits in definiert declarations
. Was ist also die Notwendigkeit, sie zu wiederholen? Was würde passieren, wenn ich hier keine Komponente einbinde?
declared
inngModule
sind aber nie benutzt. angle.io/docs/ts/latest/cookbook/… entrycomponents -Antworten:
Dies gilt für dynamisch hinzugefügte Komponenten, die mit hinzugefügt werden
ViewContainerRef.createComponent()
. Durch Hinzufügen zuentryComponents
wird der Offline-Vorlagen-Compiler angewiesen, sie zu kompilieren und Fabriken für sie zu erstellen.Die in Routenkonfigurationen registrierten Komponenten werden ebenfalls automatisch hinzugefügt,
entryComponents
da sierouter-outlet
auchViewContainerRef.createComponent()
zum Hinzufügen gerouteter Komponenten zum DOM verwendet werden.Der Offline Template Compiler (OTC) erstellt nur Komponenten, die tatsächlich verwendet werden. Wenn Komponenten nicht direkt in Vorlagen verwendet werden, kann der OTC nicht wissen, ob sie kompiliert werden müssen. Mit entryComponents können Sie den OTC anweisen, diese Komponenten auch zu kompilieren, damit sie zur Laufzeit verfügbar sind.
Was ist eine Einstiegskomponente? (angle.io)
NgModule docs (angle.io)
Wenn Sie keine dynamisch hinzugefügte Komponente
entryComponents
auflisten, wird eine Fehlermeldung über eine fehlende Factory angezeigt, da Angular keine erstellt hat.Siehe auch https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
quelle
entryComponents
können Sie dem OTC anweisen, diese Komponenten auch zu kompilieren, damit sie zur Laufzeit verfügbar sind.declarations
, sollte sie im Allgemeinen auch in aufgeführt seinentryComponents
, oder?createComponent
Ihrem Code hinzugefügt wird oder beispielsweise der Router, der diese API auch zum Hinzufügen von Komponenten verwendet.Sie werden keine bessere Erklärung erhalten als Angular-Dokumente: entry-components und ngmodule-faq .
Und unten ist die Erklärung aus den eckigen Dokumenten.
quelle
EntryComponent
soll, sollten wir dasselector
Attribut entfernen ? (da es nicht verwendet wird)Die anderen Antworten erwähnen dies, aber die grundlegende Zusammenfassung lautet:
<my-component />
Materialdialogkomponenten werden im TS-Code und nicht in der Vorlage erstellt:
Dazu müssen Sie es als entryComponent registrieren:
entryComponents: [MyExampleDialog]
Andernfalls erhalten Sie eine Fehlermeldung:
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?
quelle
Das entryComponents-Array wird verwendet, um nur Komponenten zu definieren, die nicht in HTML gefunden und dynamisch erstellt werden. Angular benötigt diesen Hinweis, um die Eintragskomponente zu finden und zu kompilieren.
Es gibt zwei Haupttypen von Eintragskomponenten:
Weitere Informationen zu Einstiegskomponenten finden Sie unter angle.io https://angular.io/guide/entry-components
quelle
Ein bisschen Hintergrund über
entryComponent
entryComponent
ist jede Komponente Winkellasten zwingend erforderlich. Sie können deklarieren,entryComponent
indem Sie es inNgModule
oder in Routendefinitionen booten.Die Dokumentation sagt unten
Beantworten Sie nun Ihre spezifische Frage zu
entryComponents
Die Datei enthält ein
entryComponents
Array@NgModule
. Sie können dies hinzufügen, um hinzuzufügen,entryComponents
ob die Komponente mit gebootet wirdViewContainerRef.createComponent()
.Das heißt, Sie erstellen Komponenten dynamisch und nicht durch Bootstrapping oder in einer Vorlage.
quelle
Ab Angular 9
entryComponents
wird dank Ivy nicht mehr benötigt, sodass diese Funktion veraltet ist und somit aus Moduldeklarationen entfernt werden kann.Veraltete APIs und Funktionen -
entryComponents
undANALYZE_FOR_ENTRY_COMPONENTS
nicht mehr erforderlichAngular Ivy
quelle