J'utilise actuellement Angular 2. Habituellement, nous utilisons @Output() addTab = new EventEmitter<any>();
puis addTab.emit()
pour émettre un événement au composant parent.
Y a-t-il moyen de le faire vice cersa, du parent à l'enfant?
angular
typescript
code1
la source
la source
Réponses:
En utilisant RxJs , vous pouvez déclarer un
Subject
dans votre composant parent et le passer en tant queObservable
composant enfant, le composant enfant doit simplement s'y abonnerObservable
.Parent-composant
Parent-HTML
Composant enfant
la source
this.eventsSubject.next({data});
chez le parent, puisthis.events.subscribe(({data}) => doSomething(data));
chez l'enfant.eventsSubject
en observable au lieu de simplement s'y abonner en tant que sujet?Autant que je sache, il existe 2 façons standard de le faire.
1. @Input
Chaque fois que les données du parent changent, l'enfant en est informé dans la méthode ngOnChanges. L'enfant peut agir en conséquence. C'est la manière standard d'interagir avec un enfant.
Créer un service et utiliser une observable dans le service partagé. L'enfant y souscrit et chaque fois qu'il y a un changement, l'enfant sera averti. C'est également une méthode populaire. Lorsque vous souhaitez envoyer autre chose que les données que vous passez en entrée, cela peut être utilisé.
la source
<child [data]="inputToChild"> </child>
devrait probablement être<child [data]="(inputToChild)"> </child>
pour obtenir des changementsDans un composant parent, vous pouvez utiliser @ViewChild () pour accéder à la méthode / variable du composant enfant.
Mettre à jour:
Angulaire à partir de 8 -
la source
numberComponent
sera le casundefined
.Utilisez le décorateur @Input () dans votre composant enfant pour permettre au parent de se lier à cette entrée.
Dans le composant enfant, vous le déclarez tel quel:
@Input() myInputName: myType
Pour lier une propriété du parent à un enfant, vous devez ajouter dans votre modèle les crochets de liaison et le nom de votre entrée entre eux.
Exemple :
<my-child-component [myChildInputName]="myParentVar"></my-child-component>
Mais attention, les objets sont passés comme référence, donc si l'objet est mis à jour dans l'enfant, la var du parent sera trop mise à jour. Cela peut parfois conduire à un comportement indésirable. Avec les types principaux, la valeur est copiée.
Pour aller plus loin, lisez ceci:
Documents: https://angular.io/docs/ts/latest/cookbook/component-communication.html
la source
Dans le parent, vous pouvez référencer l'enfant en utilisant @ViewChild. Si nécessaire (c'est-à-dire lorsque l'événement serait déclenché), vous pouvez simplement exécuter une méthode dans l'enfant depuis le parent en utilisant la référence @ViewChild.
la source