Estoy usando la plantilla Angular 4 con webpack y tengo este error cuando intento usar un componente (ConfirmComponent):
No se encontró fábrica de componentes para ConfirmComponent. ¿Lo agregó a @ NgModule.entryComponents?
El componente se declara en app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
También tengo app.module.browser.ts
yapp.module.shared.ts
¿Cómo puedo arreglar eso?
ConfirmComponent
los detalles no es suficiente para responder a su preguntaRespuestas:
Agrega esto en tu
module.ts
,si ConfirmComponent está en otro módulo, debe exportarlo allí para poder usarlo afuera, agregue:
--- Actualice Angular 9 u Angular 8 con Ivy explícitamente habilitado ---
Los componentes de entrada con Ivy ya no son necesarios y ahora están en desuso
--- para Angular 9 y 8 con Ivy desactivada ---
En el caso de un componente cargado dinámicamente y para que se genere un ComponentFactory, el componente también debe agregarse a la entradaComponentes del módulo:
de acuerdo con la definición de entryComponents
fuente
Ver los detalles sobre
entryComponent
:Si está cargando algún componente de forma dinámica, entonces debe ponerlo en ambos
declarations
yentryComponent
:fuente
entryComponents
fue la solución, ¡gracias!entryComponents
ni agregarlo aexports
trabajado para mí. PERO puedo llamar al Componente Modal desde otros componentes que no son nietosTL; DR: Un servicio en ng6 con
providedIn: "root"
no puede encontrar ComponentFactory cuando el Componente no se agrega enentryComponents
of app.module .¡Este problema también puede ocurrir si está utilizando angular 6 en combinación con la creación dinámica de un componente en un servicio!
Por ejemplo, crear una superposición:
El problema es el
definición, que proporciona este servicio en app.module .
Entonces, si su servicio se encuentra, por ejemplo, en el "OverlayModule", donde también declaró el OverlayExampleComponent y lo agregó a entryComponents, el servicio no puede encontrar ComponentFactory para OverlayExampleComponent.
fuente
providedIn
y utilizando laproviders
opción en el módulo.Tuve el mismo problema. En este caso
imports [...]
es crucial, porque no funcionará si no importaNgbModalModule
.La descripción del error dice que los componentes deben agregarse a la
entryComponents
matriz y es obvio, pero asegúrese de haber agregado este en primer lugar:fuente
Agregue ese componente a entryComponents en @NgModule del módulo de su aplicación:
así como declaraciones:
fuente
entryComponents
ni agregarlo aexports
trabajado para mí. PERO puedo llamar al Componente Modal desde otros componentes que no son nietosAgregue 'NgbModalModule' en las importaciones y el nombre de su componente en entryComponents App.module.ts como se muestra a continuación
fuente
entryComponents
ni agregarlo aexports
trabajado para mí. PERO puedo llamar al Componente Modal desde algunos otros componentes que no son nietosColoque los componentes que se crean dinámicamente en entryComponents en la función @NgModuledecorator.
fuente
entryComponents
módulo ng respectivo que se declara.entryComponents
ni agregarlo aexports
trabajado para mí. PERO puedo llamar al Componente Modal desde otros componentes que no son nietosTengo el mismo problema con angular 6, eso es lo que funcionó para mí:
Si tiene un servicio como ConfirmService , debe declararlo en los proveedores del módulo actual en lugar de root
fuente
Tuve el mismo problema con el modo de arranque
Si este es su caso, simplemente agregue el componente a las declaraciones del módulo y los componentes de entrada como sugieren otras respuestas, pero también agregue esto a su módulo
fuente
Este error ocurre cuando intenta cargar un componente dinámicamente y:
en routingModule
o en módulo
Para corregir este error, puede agregar un enrutador al componente o agregarlo a entryComponents del módulo.
fuente
Tuve el mismo problema en Angular7 cuando creo componentes dinámicos. Hay dos componentes (TreatListComponent, MyTreatComponent) que deben cargarse dinámicamente. Acabo de agregar la matriz entryComponents en mi archivo app.module.ts.
fuente
si usa enrutamiento en su aplicación
por ejemplo :
fuente
En mi caso, no necesitaba inputComponents en absoluto, solo la configuración básica como se describe en el siguiente enlace, pero necesitaba incluir la importación tanto en el módulo principal de la aplicación como en el módulo adjunto.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Solo necesita agregarlo a entryComponents si se incluirá un componente en el modal. De los documentos:
fuente
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
usando angular 8Estaba teniendo el mismo problema con ag-grid usando componentes dinámicos. Descubrí que necesitas agregar el componente dinámico al módulo ag-grid .withComponents []
importaciones: [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot (), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonCom ,
fuente
En mi caso, olvidé agregar
MatDialogModule
a las importaciones en un módulo secundario.fuente
Para aclarar aquí. En caso de que no lo esté utilizando
ComponentFactoryResolver
directamente en el componente y desee abstraerlo al servicio, que luego se inyecta en el componente, debe cargarlo en los proveedores para ese módulo, ya que si se carga de manera diferida no funcionará.fuente
En caso de que aún tenga el error después de proporcionar la clase de diálogo de componente
entryComponents
, intente reiniciarng serve
, funcionó para mí.fuente
Mi error fue llamar al método abierto NgbModal con parámetros incorrectos de .html
fuente
Debe importar el
NgbModule
en el módulo de esta manera:fuente
entryComponents
Es vital. Las respuestas anteriores sobre esto son correctas.Pero...
providedIn: 'root'
aprovidedIn: MyModule
. Como buena práctica general, solo debe usarprovidedIn: SomeModule
para todos los servicios de diálogo que están en módulos.fuente
Estoy usando Angular8, y estoy tratando de abrir el componente dinámicamente para formar otro módulo . En este caso, debe
import the module
ingresar al módulo que está tratando de abrir el componente, por supuesto, ademásexport
del componente y enumerarlo en laentryComponents
matriz como lo hicieron las respuestas anteriores.fuente
En mi caso, resolví este problema:
1) colocando
NgxMaterialTimepickerModule
enapp module imports:[ ]
2) colocando
NgxMaterialTimepickerModule
entestmodule.ts imports:[ ]
3) colocando
testcomponent
endeclartions:[ ]
yentryComponents:[ ]
(Estoy usando la versión angular 8+)
fuente
Declarar todas las páginas nuevas en app.module
fuente