Dynamiquement l'AJOUT et la SUPPRESSION de Composants Angulaire
Du cours officiel docs montre comment dynamiquement changement composants dans un <ng-template>
tag. https://angular.io/guide/dynamic-component-loader
Ce que je veux réaliser est, disons que j'ai 3 composantes: header
, section
, et footer
avec les sélecteurs suivants:
<app-header>
<app-section>
<app-footer>
Et puis il y a 6 boutons ajouter ou supprimer chaque composant: Add Header
, Add Section
, et Add Footer
et quand je clique sur Add Header
, la page s'ajouter <app-header>
à la page qui le rend, de sorte que la page va contenir:
<app-header>
Et puis si je clique sur Add Section
deux fois, la page contient maintenant:
<app-header>
<app-section>
<app-section>
Et si je clique sur Add Footer
, la page contient maintenant tous ces composants:
<app-header>
<app-section>
<app-section>
<app-footer>
Est-il possible de réaliser cela dans Angulaire? Notez que ngFor
n'est pas la solution, je suis à la recherche, car elle permet seulement d'ajouter les mêmes composants, pas différents éléments d'une page.
EDIT: ngIf et ngFor n'est pas la solution, je suis à la recherche pour que les modèles sont déjà prédéterminé. Ce que je cherche, c'est quelque chose comme une pile de composants ou d'une gamme de composants où l'on peut ajouter, supprimer et modifier les index du tableau facilement.
EDIT 2: Pour le rendre plus clair, prenons un autre exemple de pourquoi ngFor ne fonctionne pas. Disons que nous avons les éléments suivants:
<app-header>
<app-introduction>
<app-camera>
<app-editor>
<app-footer>
Voici maintenant un nouveau composant, <app-description>
, que l'utilisateur souhaite insérer dans entre et <app-editor>
. ngFor ne fonctionne que si il y en a un même composant que je veux en boucle. Mais pour les différents composants, ngFor échoue ici.
ngIf et ngFor n'est pas la solution, je suis à la recherche pour que les modèles sont déjà prédéterminé. Ce que je cherche, c'est quelque chose comme une pile de composants ou d'une gamme de composants où l'on peut ajouter, supprimer et modifier les index du tableau facilement.
Cela peut aussi vous aider si vous souhaitez ajouter différents types de composants stackoverflow.com/questions/36325212/...
Merci! Cela pourrait être particulièrement utile que j'ai appris à connaître ngComponentOutlet
ngComponentOutlet
manque encore quelques fonctionnalités de base. Il y a une pull request à l'adresse de ceux-ci depuis longtemps, mais qui n'avait pas encore fusionné autant que je sache. Donc, la lecture et la transmission de valeurs de/pour ajouter dynamiquement des composants ne fonctionne pas bien.OriginalL'auteur Marcellino Corleone | 2017-07-06
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez d'atteindre peut être fait par la création de composants dynamiquement à l'aide de la
ComponentFactoryResolver
et puis les injecter dans unViewContainerRef
. Une façon de le faire dynamiquement en passant de la classe du composant comme un argument de votre fonction qui permettra de créer et d'injecter le composant.Voir l'exemple ci-dessous:
Notes:
Si vous voulez faire plus facile de retirer les composants plus tard, vous pouvez garder une trace d'eux dans une variable locale, voir
this.components
. Alternativement, vous pouvez faire une boucle sur tous les éléments à l'intérieur de laViewContainerRef
.Vous devez enregistrer votre composant d'une entrée composante. Dans votre définition de module inscrire votre composant comme un entryComponent (
entryComponents: [DraggableComponent]
).Exemple:
https://plnkr.co/edit/mrXtE1ICw5yeIUke7wl5
Pour plus d'informations:
https://angular.io/guide/dynamic-component-loader
J'ai ajouté un plunker à la réponse. Merci de voir https://plnkr.co/edit/mrXtE1ICw5yeIUke7wl5. Espérons que cette aide.
J'ai édité le Plunker inclure les différents types de composants (foo et bar) et cela fonctionne! Merci beaucoup! plnkr.co/modifier/tMR2ahkb5VRpWCIh2Jvb?p=preview
Excellent exemple de code et de. Je cherchais exactement ce. Je voudrais seulement suggérer l'édition de ce "const = ce.des composants.trouver..." à "const = ce.des composants.reverse().trouver..." afin de supprimer la dernière inséré composant. Ou ajouter un id de suivi spécifiques.
Il y a aussi un tutoriel à ce sujet ici: courses.ultimateangular.com/courses/angular-pro/lectures/...
OriginalL'auteur Ash Belmokadem
J'ai créé une démo pour montrer la dynamique d'ajouter et de supprimer des processus.
Composant Parent crée l'enfant composants dynamiquement et les supprime.
Cliquez sur pour la démo
Composant Parent
Composant Enfant
ajouter des références à la app.le module.ts
.filter(x => x.instance.index == index)[0]
par.find(...)
Oui, vous avez raison, mais qui ont le vieux jours copain quand j'ai écrit cela 😉
OriginalL'auteur WasiF