Comment puis-je utiliser/créer un modèle dynamique pour la compilation dynamique de la Composante Angulaire 2.0?

Je veux dynamiquement créer modèle. Cela devrait être utilisé pour construire un ComponentType à Runtime et place (même remplacer) quelque part à l'intérieur du Composant d'hébergement.

Jusqu'à ce que RC4 j'ai été en utilisant ComponentResolver, mais avec RC5 je reçois un message:

ComponentResolver est déconseillé pour la compilation dynamique. Utilisation ComponentFactoryResolver avec @NgModule/@Component.entryComponents ou ANALYZE_FOR_ENTRY_COMPONENTS fournisseur de la place. Pour l'exécution de la compilation seulement, vous pouvez également utiliser Compiler.compileComponentSync/Async.

J'ai trouvé ceci (officiel angular2) document

Angulaire 2 Dynamique Synchrone À La Création De Composant

Et comprends que je peux utiliser

  • Genre de dynamique ngIf avec ComponentFactoryResolver. Si je vais passer composants connus dans l'organisation de l'un à l'intérieur de @Component({entryComponents: [comp1, comp2], ...}) - je peux l'utiliser .resolveComponentFactory(componentToRender);
  • Réel d'exécution de la compilation, avec Compiler...

Mais la question est de savoir comment l'utiliser Compiler? La Note ci-dessus, dit que je devrais l'appeler: Compiler.compileComponentSync/Async - oui, comment?

Par exemple. Je veux créer (en fonction de la configuration de conditions) ce genre de modèle, pour un type de paramètres

<form>
   <string-editor
     [propertyName]="'code'"
     [entity]="entity"
   ></string-editor>
   <string-editor
     [propertyName]="'description'"
     [entity]="entity"
   ></string-editor>
   ...

et dans un autre cas celle-ci (string-editor est remplacé par text-editor)

<form>
   <text-editor
     [propertyName]="'code'"
     [entity]="entity"
   ></text-editor>
   ...

Et ainsi de suite (autre numéro/date de référence/editors par types de propriété, ignoré certaines propriétés pour certains utilisateurs...). I. e. ceci est un exemple, configuration réelle pourrait générer beaucoup plus différents et des modèles complexes.

La modèle est en train de changer, donc je ne peux pas utiliser ComponentFactoryResolver et passer existants... j'ai besoin de solution avec la Compiler


AOT et JitCompiler (ancien RuntimeCompiler)

Vous souhaitez utiliser cette fonctionnalité avec AOT (avance de temps de compilation)? Êtes-vous:

D'erreur: Erreur rencontrée lors de la résolution des valeurs de symbole de manière statique. Les appels de fonction ne sont pas pris en charge. Envisager de remplacer la fonction ou lambda avec une référence à une fonction exportée (position 65:17 dans l'original .fichier ts), la résolution de symbole COMPILER_PROVIDERS dans .../node_modules/@angular/compiler/src/compiler.d.ts,

S'il vous plaît, laissez votre commentaire, vote ici:

Pourrait/serait/sera le code à l'aide COMPILER_PROVIDERS être pris en charge par AOT?

  • Étant donné que la solution que j'ai trouvé était tellement agréable que je veux tout le monde à trouver cette question pour avoir un coup d'oeil à ma réponse, qui est très loin vers le bas tout en bas pour le moment. 🙂
  • L'article Voici ce que vous devez savoir à propos de la dynamique des composants Angulaire a bonne explication de la dynamique des composants.
  • Voici le problème avec chaque réponse là-bas et ce que $compile pourraient réellement faire que ces méthodes ne peuvent pas, je suis en création d'une application où j'ai juste envie de compiler le code HTML comme il arrive par une 3ème partie de la page et les appels ajax. Je ne peux pas supprimer le code HTML de la page et de le placer dans mon propre modèle. Soupir
  • Il ya une raison pourquoi ce n'est pas possible par la conception. Angulaire n'est pas la faute de pour de mauvaises décisions en matière d'architecture ou des systèmes de legs que certaines personnes ont. Si vous souhaitez analyser existantes du code HTML libre à vous d'en utiliser un autre cadre Angulaire fonctionne parfaitement bien avec WebComponents. Réglage des limites claires pour guider les hordes de les programmeurs inexpérimentés est plus important que de permettre sale de hacks pour quelques systèmes existants.