Estoy trabajando en una Ionicaplicación ( 2.0.0-rc0) que depende de angular 2. Entonces ngModulesse incluye la nueva introducción de . Estoy agregando mi a app.module.ts.continuación.
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 {}
¿Qué hace entryComponentsaquí? Componentsya están definidos en declarations. Entonces, ¿cuál es la necesidad de repetirlos? ¿Qué pasaría si no incluyo un componente aquí?

declaredenngModulepero que nunca se usan. angular.io/docs/ts/latest/cookbook/… entrycomponents -Respuestas:
Esto es para componentes agregados dinámicamente que se agregan usando
ViewContainerRef.createComponent(). Agregarlos aentryComponentsle dice al compilador de plantillas fuera de línea que los compile y cree fábricas para ellos.Los componentes registrados en las configuraciones de ruta también se agregan automáticamente
entryComponentsporquerouter-outlettambién se usanViewContainerRef.createComponent()para agregar componentes enrutados al DOM.El compilador de plantillas sin conexión (OTC) solo crea componentes que realmente se usan. Si los componentes no se usan directamente en las plantillas, el OTC no puede saber si es necesario compilarlos. Con entryComponents puede indicarle al OTC que también compile estos componentes para que estén disponibles en tiempo de ejecución.
¿Qué es un componente de entrada? (angular.io)
Documentos de NgModule (angular.io)
Si no enumera un componente agregado dinámicamente
entryComponents, recibirá un mensaje de error sobre una fábrica que falta porque Angular no habrá creado uno.Ver también https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
fuente
entryComponentsusted puede decirle al OTC que también compile estos componentes para que estén disponibles en tiempo de ejecución.declarations, también debería estar en la listaentryComponents, ¿verdad?createComponentsu código o, por ejemplo, el enrutador que también utiliza la API Thod para agregar componentes.No obtendrá una explicación mejor que los documentos angulares: entrada-componentes y ngmodule-faq .
Y a continuación está la explicación de los documentos angulares.
fuente
EntryComponent¿deberíamos eliminar elselectoratributo? (ya que no se usará)Las otras respuestas mencionan esto, pero el resumen básico es:
<my-component />Los componentes de diálogo de material se crean dentro del código TS y no en la plantilla:
Esto requiere que lo registres como una entradaComponente:
entryComponents: [MyExampleDialog]De lo contrario, obtienes un error:
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?fuente
La matriz entryComponents se usa para definir solo componentes que no se encuentran en html y se crean dinámicamente. Angular requiere esta sugerencia para encontrar el componente de entrada y compilarlos.
Hay dos tipos principales de componentes de entrada:
Para obtener información más detallada sobre los componentes de entrada, consulte angular.io https://angular.io/guide/entry-components
fuente
Un poco de historia sobre
entryComponententryComponentEs cualquier componente de cargas angulares imperativamente. Puede declararentryComponentmediante el arranque enNgModuleo en las definiciones de ruta.La documentación dice a continuación
Ahora para responder a su pregunta específica sobre
entryComponentsHay una
entryComponentsmatriz en el@NgModulearchivo. Puede usar esto para agregarentryComponentssi el componente se arranca usandoViewContainerRef.createComponent().Es decir, está creando componentes dinámicamente y no mediante bootstrapping o en plantilla.
fuente
A partir de Angular 9
entryComponentsya no es necesario gracias a que Ivy permite que esta característica quede en desuso y, por lo tanto, se pueda eliminar de las declaraciones del módulo.API y características obsoletas,
entryComponentsyANALYZE_FOR_ENTRY_COMPONENTSya no son necesariasHiedra angular
fuente