Je travaille sur une Ionic
application ( 2.0.0-rc0
) qui dépend de angular 2
. La nouvelle introduction de ngModules
est donc incluse. J'ajoute mon app.module.ts.
ci - dessous.
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 {}
Que fait entryComponents
ici? Components
sont déjà définis dans declarations
. Alors, quel est le besoin de les répéter? Que se passerait-il si je n'incluais pas de composant ici?
declared
enngModule
mais ne sont jamais utilisés. angular.io/docs/ts/latest/cookbook/… entrycomponents -Réponses:
Ceci est pour les composants ajoutés dynamiquement qui sont ajoutés à l'aide de
ViewContainerRef.createComponent()
. Les ajouter àentryComponents
indique au compilateur de modèles hors ligne de les compiler et de créer des usines pour eux.Les composants enregistrés dans les configurations de routage sont également ajoutés automatiquement,
entryComponents
car ils permettentrouter-outlet
égalementViewContainerRef.createComponent()
d'ajouter des composants routés au DOM.Le compilateur de modèles hors ligne (OTC) génère uniquement des composants qui sont réellement utilisés. Si les composants ne sont pas utilisés directement dans les modèles, l'OTC ne peut pas savoir s'ils doivent être compilés. Avec entryComponents, vous pouvez demander à l'OTC de compiler également ces composants afin qu'ils soient disponibles au moment de l'exécution.
Qu'est-ce qu'un composant d'entrée? (angular.io)
Documentation sur NgModule (angular.io)
Si vous ne répertoriez pas un composant ajouté dynamiquement,
entryComponents
vous obtiendrez un message d'erreur concernant une usine manquante car Angular n'en aura pas créé.Voir aussi https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
la source
entryComponents
vous pouvez dire à l'OTC de compiler également ces composants afin qu'ils soient disponibles au moment de l'exécution.declarations
il devrait également être répertoriéentryComponents
, non?createComponent
dans votre code ou par exemple le routeur qui utilise également l'API thod pour ajouter des composants.Vous n'obtiendrez pas une meilleure explication que les documents Angular: entry-components et ngmodule-faq .
Et ci-dessous est l'explication de la documentation angulaire.
la source
EntryComponent
devons-nous supprimer l'selector
attribut? (puisqu'il ne sera pas utilisé)Les autres réponses le mentionnent mais le résumé de base est:
<my-component />
Les composants de la boîte de dialogue Matériau sont créés dans le code TS et non dans le modèle:
Cela vous oblige à l'enregistrer en tant qu'entrée.
entryComponents: [MyExampleDialog]
Sinon, vous obtenez une erreur:
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?
la source
Le tableau entryComponents est utilisé pour définir uniquement les composants qui ne sont pas trouvés dans html et créés dynamiquement. Angular a besoin de cette astuce pour trouver le composant d'entrée et le compiler.
Il existe deux principaux types de composants d'entrée:
Pour plus d'informations sur les composants d'entrée, veuillez vous référer à angular.io https://angular.io/guide/entry-components
la source
Un peu de contexte sur
entryComponent
entryComponent
est tout composant Charges angulaires impérativement. Vous pouvez le déclarerentryComponent
en l'amorçant dansNgModule
ou dans les définitions de route.La documentation dit ci-dessous
Maintenant, pour répondre à votre question spécifique sur
entryComponents
Il y a un
entryComponents
tableau dans le@NgModule
fichier. Vous pouvez l'utiliser pour ajouterentryComponents
si le composant est amorcé à l'aide deViewContainerRef.createComponent()
.C'est-à-dire que vous créez des composants de manière dynamique et non par bootstrapping ou dans un modèle.
la source
À partir d'Angular 9, ce
entryComponents
n'est plus nécessaire grâce à Ivy permettant à cette fonctionnalité d'être obsolète et peut donc être supprimée des déclarations de module.API et fonctionnalités obsolètes -
entryComponents
etANALYZE_FOR_ENTRY_COMPONENTS
plus nécessairesLierre angulaire
la source