J'essaie de configurer un système d'onglets qui permet aux composants de s'enregistrer eux-mêmes (avec un titre). Le premier onglet est comme une boîte de réception, il existe de nombreuses actions / éléments de lien parmi lesquels choisir pour les utilisateurs, et chacun de ces clics devrait pouvoir instancier un nouveau composant, au clic. Les actions / liens proviennent de JSON.
Le composant instancié s'enregistrera alors comme un nouvel onglet.
Je ne sais pas si c'est la «meilleure» approche? Jusqu'à présent, les seuls guides que j'ai vus concernent les onglets statiques, ce qui n'aide pas.
Jusqu'à présent, je n'ai que le service d'onglets qui est démarré principalement pour persister dans l'application. Cela ressemble à ceci:
export interface ITab { title: string; }
@Injectable()
export class TabsService {
private tabs = new Set<ITab>();
addTab(title: string): ITab {
let tab: ITab = { title };
this.tabs.add(tab);
return tab;
}
removeTab(tab: ITab) {
this.tabs.delete(tab);
}
}
Des questions:
- Comment puis-je avoir une liste dynamique dans la boîte de réception qui crée de nouveaux (différents) onglets? Je suppose que le
DynamicComponentBuilder
serait utilisé? - Comment les composants peuvent-ils être créés à partir de la boîte de réception (au clic) s'enregistrer en tant qu'onglets et également être affichés? Je suppose
ng-content
, mais je ne trouve pas beaucoup d'informations sur la façon de l'utiliser
ÉDITER: Une tentative de clarification.
Considérez la boîte de réception comme une boîte de réception de courrier. Les éléments sont récupérés au format JSON et il affiche plusieurs éléments. Une fois que l'un des éléments est cliqué, un nouvel onglet est créé avec le type d'action de cet élément. Le type est alors un composant.
EDIT 2: Image .
Réponses:
mettre à jour
Exemple Angular 5 StackBlitz
mettre à jour
ngComponentOutlet
a été ajouté à 4.0.0-beta.3mettre à jour
Il y a un
NgComponentOutlet
travail en cours qui fait quelque chose de similaire https://github.com/angular/angular/pull/11235RC.7
Exemple Plunker RC.7
Exemple d'utilisation
Voir également angular.io CHARGEUR À COMPOSANTS DYNAMIQUES
Versions plus anciennes xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Cela a encore changé dans Angular2 RC.5
Je mettrai à jour l'exemple ci-dessous mais c'est le dernier jour avant les vacances.
Cet exemple Plunker montre comment créer dynamiquement des composants dans RC.5
Mise à jour - utilisez ViewContainerRef .createComponent ()
Parce qu'elle
DynamicComponentLoader
est obsolète, l'approche doit être mise à jour à nouveau.Exemple Plunker
RC.4 Exemple Plunker beta.17
Mise à jour - utilisez loadNextToLocation
Exemple Plunker beta.17
original
Pas entièrement sûr de votre question quelles sont vos exigences, mais je pense que cela devrait faire ce que vous voulez.
Le
Tabs
composant obtient un tableau de types transmis et il crée des "onglets" pour chaque élément du tableau.Exemple Plunker beta.15 (non basé sur votre Plunker)
Il existe également un moyen de transmettre des données qui peuvent être transmises au composant créé dynamiquement comme (
someData
devraient être transmises commetype
)Il existe également une certaine prise en charge pour utiliser l'injection de dépendance avec des services partagés.
Pour plus de détails, voir https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
la source
DclWrapper
faire créer une instance réelle.ViewContainerRef
au lieu d'utiliserViewChild
, puis<dcl-wrapper>
devient lui-même la cible. Les éléments sont ajoutés en tant que frères et sœurs de la cible et seront donc en dehors de<dcl-wrapper>
cette façon.''
(chaîne vide) `et changer le constructeur enconstructor(private target:ViewContainerRef) {}
, puis les composants ajoutés dynamiquement deviennent frères et sœurs de<dcl-wrapper>
Je ne suis pas assez cool pour les commentaires. J'ai corrigé le plongeur de la réponse acceptée pour travailler pour rc2. Rien d'extraordinaire, les liens vers le CDN viennent d'être rompus, c'est tout.
https://plnkr.co/edit/kVJvI1vkzrLZJeRFsZuv?p=preview
la source
il y a un composant prêt à l'emploi (compatible rc5) ng2-steps qui utilise
Compiler
pour injecter le composant au conteneur d'étape et le service pour tout câbler ensemble (synchronisation des données)la source