Estoy trabajando en una Ionic
aplicación ( 2.0.0-rc0
) que depende de angular 2
. Entonces ngModules
se 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 entryComponents
aquí? Components
ya están definidos en declarations
. Entonces, ¿cuál es la necesidad de repetirlos? ¿Qué pasaría si no incluyo un componente aquí?
declared
enngModule
pero 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 aentryComponents
le 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
entryComponents
porquerouter-outlet
tambié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
entryComponents
usted 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?createComponent
su 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 elselector
atributo? (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
entryComponent
entryComponent
Es cualquier componente de cargas angulares imperativamente. Puede declararentryComponent
mediante el arranque enNgModule
o en las definiciones de ruta.La documentación dice a continuación
Ahora para responder a su pregunta específica sobre
entryComponents
Hay una
entryComponents
matriz en el@NgModule
archivo. Puede usar esto para agregarentryComponents
si 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
entryComponents
ya 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,
entryComponents
yANALYZE_FOR_ENTRY_COMPONENTS
ya no son necesariasHiedra angular
fuente