J'utilise le modèle Angular 4 avec webpack et j'ai cette erreur lorsque j'essaie d'utiliser un composant (ConfirmComponent):
Aucune fabrique de composants trouvée pour ConfirmComponent. L'avez-vous ajouté à @ NgModule.entryComponents?
Le composant est déclaré dans app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
J'ai aussi app.module.browser.ts
etapp.module.shared.ts
Comment puis-je résoudre ce problème?
ConfirmComponent
les détails ne suffisent pas pour répondre à votre questionRéponses:
Ajoutez ceci dans votre
module.ts
,si ConfirmComponent est dans un autre module, vous devez l'exporter ainsi vous pouvez l'utiliser à l'extérieur, ajoutez:
--- Mettre à jour Angular 9 ou Angular 8 avec Ivy explicitement activé ---
Les composants d'entrée avec Ivy ne sont plus nécessaires et sont désormais obsolètes
--- pour Angular 9 et 8 avec Ivy désactivé ---
Dans le cas d'un composant chargé dynamiquement et pour qu'un ComponentFactory soit généré, le composant doit également être ajouté à l'entrée du moduleComponents:
selon la définition de entryComponents
la source
Voir les détails sur
entryComponent
:Si vous chargez un composant dynamiquement, vous devez le mettre à la fois
declarations
etentryComponent
:la source
entryComponents
était la solution - merci!entryComponents
ni l' ajouter àexports
travaillé pour moi. MAIS je peux appeler le ModalComponent à partir d'autres composants qui ne sont pas des petitsTL; DR: Un service en NG6 avec
providedIn: "root"
ne peut pas trouver le ComponentFactory lorsque le composant est pas ajouté dans leentryComponents
de app.module .Ce problème peut également se produire si vous utilisez angular 6 en combinaison avec la création dynamique d'un composant dans un service!
Par exemple, créer une superposition:
Le problème est le
définition, qui fournit ce service dans app.module .
Ainsi, si votre service se trouve, par exemple, dans le "OverlayModule", où vous avez également déclaré OverlayExampleComponent et l'avez ajouté à entryComponents, le service ne peut pas trouver ComponentFactory pour OverlayExampleComponent.
la source
providedIn
et en utilisant plutôt l'providers
option sur le module.J'ai eu le même problème. Dans ce cas,
imports [...]
c'est crucial, car cela ne fonctionnera pas si vous n'importez pasNgbModalModule
.La description de l'erreur indique que les composants doivent être ajoutés au
entryComponents
tableau et c'est évident, mais assurez-vous d'avoir ajouté celui-ci en premier lieu:la source
Ajoutez ce composant à entryComponents dans @NgModule du module de votre application:
ainsi que les déclarations:
la source
entryComponents
ni l' ajouter àexports
travaillé pour moi. MAIS je peux appeler le ModalComponent à partir d'autres composants qui ne sont pas des petitsAjoutez «NgbModalModule» dans les importations et le nom de votre composant dans entryComponents App.module.ts comme indiqué ci-dessous
la source
entryComponents
ni l' ajouter àexports
travaillé pour moi. MAIS je peux appeler le ModalComponent à partir d'autres composants qui ne sont pas des petitsPlacez les composants créés dynamiquement dans entryComponents sous la fonction @NgModuledecorator.
la source
entryComponents
module ng respectif qu'elle a déclaré.entryComponents
ni l' ajouter àexports
travaillé pour moi. MAIS je peux appeler le ModalComponent à partir d'autres composants qui ne sont pas des petitsJ'ai le même problème avec angular 6, c'est ce qui a fonctionné pour moi:
Si vous avez un service comme ConfirmService , vous devez le déclarer dans les fournisseurs du module actuel au lieu de root
la source
J'ai eu le même problème pour le bootstrap modal
Si tel est votre cas, ajoutez simplement le composant aux déclarations de module et les composants d'entrée comme le suggèrent d'autres réponses, mais ajoutez-le également à votre module
la source
Cette erreur se produit lorsque vous essayez de charger un composant dynamiquement et:
dans routingModule
ou en module
Pour corriger cette erreur, vous pouvez ajouter un routeur au composant ou l'ajouter à entryComponents du module.
la source
J'ai eu le même problème dans Angular7 lorsque je crée des composants dynamiques. Il y a deux composants (TreatListComponent, MyTreatComponent) qui doivent être chargés dynamiquement. Je viens d'ajouter le tableau entryComponents à mon fichier app.module.ts.
la source
si vous utilisez le routage dans votre application
par exemple :
la source
Dans mon cas, je n'avais pas du tout besoin de entryComponents - juste la configuration de base décrite dans le lien ci-dessous, mais je devais inclure l'importation à la fois dans le module d'application principal et dans le module englobant.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Vous n'avez besoin de l'ajouter à entryComponents que si un composant sera inclus dans le modal. De la documentation:
la source
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
en utilisant angulaire 8J'obtenais le même problème avec ag-grid en utilisant des composants dynamiques. J'ai découvert que vous devez ajouter le composant dynamique au module ag-grid .withComponents []
Importations: [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot (), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonComponent) ],
la source
Dans mon cas, j'ai oublié d'ajouter
MatDialogModule
aux importations dans un module enfant.la source
Pour des éclaircissements ici. Dans le cas où vous n'utilisez pas
ComponentFactoryResolver
directement dans le composant et que vous souhaitez l'abstraire au service, qui est ensuite injecté dans le composant, vous devez le charger sous les fournisseurs de ce module, car s'il est chargé paresseux, cela ne fonctionnera pas.la source
Dans le cas où vous avez toujours l'erreur après avoir fourni la classe de dialogue de composant dans
entryComponents
, essayez de redémarrerng serve
- cela a fonctionné pour moi.la source
Mon erreur appelait la méthode ouverte NgbModal avec des paramètres incorrects de .html
la source
Vous devez importer le
NgbModule
dans le module comme ceci:la source
entryComponents
c'est essentiel. Les réponses ci-dessus sont correctes.Mais...
providedIn: 'root'
àprovidedIn: MyModule
. Comme bonne pratique générale, vous devez simplement utiliser leprovidedIn: SomeModule
pour tous les services de dialogue qui sont dans les modules.la source
J'utilise Angular8, et j'essaie d' ouvrir le composant de manière dynamique à partir d'un autre module , dans ce cas, vous devez
import the module
entrer dans le module qui essaie d'ouvrir le composant, bien sûr en plusexport
du composant et le répertorier dans leentryComponents
tableau comme l'ont fait les réponses précédentes.la source
Dans mon cas, j'ai résolu ce problème en:
1) plaçant
NgxMaterialTimepickerModule
enapp module imports:[ ]
2) plaçant
NgxMaterialTimepickerModule
entestmodule.ts imports:[ ]
3) plaçant
testcomponent
endeclartions:[ ]
etentryComponents:[ ]
(J'utilise la version angulaire 8+)
la source
Déclarez toutes les nouvelles pages dans app.module
la source