Angular2 enfant composant de données
Disons que j'ai deux composantes: parent
et child
. Le HTML devrait ressembler à ceci:
<parent title="Welcome">
<child name="Chris">Blue Team</child>
<child name="Tom">Red Team</child>
</parent>
Le résultat final devrait ressembler:
<h1>Welcome</h2>
<ul>
<li><b>Chris</b> is on the Blue Team</li>
<li><b>Tom</b> is on the Red Team</li>
</ul>
Le composant parent:
@Component({
selector: 'parent',
directives: [ChildComponent], //needed?
template: `
<h1>{{title}}</h1>
<ul>
<li *ngFor="#child of children()">{{child.content}}<li>
</ul>`
})
export class ParentComponent {
@Input() title;
children() {
//how?
}
}
Comment puis-je accéder à l'enfant composants à l'intérieur du parent et obtenir leur contenu?
Aussi, je ne veux pas que les enfants soient automatiquement rendus. Selon certaines conditions que j'ai peut choisir de ne pas afficher certains enfants.
Grâce.
Il est possible d'arriver à cela, mais il est juste trop de travail, vous pouvez obtenir de très près exemple here
OriginalL'auteur pbz | 2016-04-20
Vous devez vous connecter pour publier un commentaire.
<ng-content>
Pour projeter le contenu d'un élément (transclusion), vous devrez le
<ng-content>
élément comme<ng-content select="xxx">
mais cela ne fonctionnera pas pour votre cas d'utilisation, parce que
<ng-content>
ne produit pas de contenu, il ne des projets (fonctionne comme un placehoder où les enfants sont affichées à l'intérieur de vos composants de modèle.Même si
*ngFor
serait de produire 3<ng-content>
éléments, les enfants ne serait affiché une fois dans la première<ng-content>
élément.<ng-content>
permet d'utiliser des sélecteurs commeoù un modèle comme
entraînerait
Un plus puissant et plus souple approche a expliqué dans Les événements de liaison lors de l'utilisation d'un ngForTemplate Angulaire 2 (de @kemsky s commentaire)
<template>
,@ViewChildren()
, et*ngForTemplate
Si vous enchaînez les enfants dans
<template>
des balises que vous pouvez y accéder en utilisant@ContentChildren()
et insérez-les à l'aide de*ngFor
et*ngForTemplate
.Je suis à l'aide d'un petit hack ici avec l'intérieur
*ngFor
. Il y a une meilleure approche de travail en cours (ngTemplateOutlet
https://github.com/angular/angular/pull/8021 déjà fusionné)Plunker exemple
Voir aussi Comment répéter un morceau de HTML en plusieurs fois sans ngFor et sans autre @Composant pour plus d'
ngTemplateOutlet
Plunker exemples.mise à jour Angulaire 5
ngOutletContext
a été renomméngTemplateOutletContext
Voir aussi https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29
OriginalL'auteur Günter Zöchbauer
Peut-être vous êtes à la recherche pour cela?
https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parents-enfants-local-var
Vous pouvez attribuer un local var à tout enfant dans le parent de la vue
OriginalL'auteur Antony Budianto