¿Por qué entryComponents ya no es necesario en el compilador Angular 9 / ivy?


17

¿Alguien puede dar una explicación clara de por qué en el compilador IVY, la API de componentes de entrada ya no es necesaria? En otras palabras, lo que se cambió internamente para que Angular de repente no necesite un aviso de que va a crear un componente de forma dinámica

Respuestas:


37

ViewEngine

Antes de Ivy, el compilador ViewEngine realizó todo el análisis del programa basado en las configuraciones de NgModule y la plantilla html y luego produjo fábricas de módulos y componentes basadas en esta información transitiva global.

Esto significa que si tiene un componente al que no hace referencia en la plantilla y no lo ha agregado a la entryComponentsmatriz de NgModule, este componente no se compilará y no podrá renderizarlo dinámicamente porque Angular no lo sabe dónde conseguir fábrica para este componente.

Una vez que lo haya agregado, el compilador producirá una fábrica dedicada y también agregará esta fábrica al HashMap interno para que se pueda resolver ComponentFactoryResolver.

Hiedra

Ivy introdujo un compilador ngtsc completamente nuevo cuyo modelo mental es que el decorador es el compilador .

En otras palabras, la arquitectura general de ngtsc es un conjunto de transformadores TypeScript : para componentes, tuberías, ngModule, etc.

Estos transformadores emiten funciones estáticas como AppComponent.ɵfac, AppComponent.ɵcmpen su lugar, lo que significa que el código transpilado reside en el mismo archivo donde se encuentra el componente original / pipe / ngModule. Así que tenemos fábricas (todo el código requerido para crear instancias de componentes / tuberías / módulos angulares) en el mismo lugar y esas propiedades estáticas pueden acceder fácilmente a ellas.

En palabras simples, si hay un archivo incluido en la compilación de TypeScript que tiene clase con un @Component decorador, el compilador ngtsc emitirá la fábrica para esta clase en el mismo archivo.

Como puede adivinar si importa ese componente en cualquier archivo y Angular puede descubrir fácilmente su fábrica a través de la propiedad estática.

Ver también:


1
¿Qué pasa con los componentes web / elementos angulares? ¿Lo guardo si deseo exportar mis componentes como elementos personalizados? Los documentos todavía dicen que los agregue en los componentes de entrada
usuario2010955

@ user2010955 No. Creo que no necesita registrar elementos con entryComponents en NgModules.
Yurzui
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.