ViewEngine
Vor Ivy führte der ViewEngine-Compiler die gesamte Programmanalyse basierend auf NgModule-Konfigurationen und HTML-Vorlagen durch und erstellte dann Modul- und Komponentenfabriken basierend auf diesen globalen transitiven Informationen.
Dies bedeutet, dass wenn Sie eine Komponente haben, auf die Sie in der Vorlage nicht verweisen und die Sie nicht zum entryComponents
Array von NgModule hinzugefügt haben, diese Komponente nicht kompiliert wird und Sie sie nicht dynamisch rendern können, da Angular es nicht weiß Wo bekomme ich die Fabrik für diese Komponente?
Sobald Sie es hinzugefügt haben, erstellt der Compiler eine dedizierte Factory und fügt diese Factory auch der internen HashMap hinzu, damit sie aufgelöst werden kann ComponentFactoryResolver
.
Efeu
Ivy stellte einen völlig neuen ngtsc-Compiler vor, dessen mentales Modell darin besteht, dass der Dekorateur der Compiler ist .
Mit anderen Worten, die Gesamtarchitektur von ngtsc besteht aus einer Reihe von TypeScript-Transformatoren : für Komponenten, Pipe, ngModule usw.
Diese Transformatoren senden statische Funktionen aus AppComponent.ɵfac
, AppComponent.ɵcmp
dh, dass sich transpilierter Code in derselben Datei befindet, in der sich die ursprüngliche Komponente / Pipe / ngModule befindet. Wir haben also Fabriken (der gesamte Code, der zum Instanziieren von Angular-Komponenten / Rohren / Modulen erforderlich ist) am selben Ort, auf die diese statischen Eigenschaften leicht zugreifen können.
Mit einfachen Worten, wenn in der TypeScript-Kompilierung eine Datei enthalten ist, die eine Klasse mit einem @Component
Dekorator enthält, gibt der ngtsc-Compiler die Factory für diese Klasse in derselben Datei aus.
Wie Sie sich vorstellen können, können Sie diese Komponente anhand statischer Eigenschaften leicht erkennen, wenn Sie diese Komponente in eine beliebige Datei importieren.
Siehe auch: