Pour autant que je sache, il y a deux façons standard de le faire.
1. @Input
Chaque fois que les données du parent sont modifiées, l'enfant en est informé par le biais de la méthode ngOnChanges. L'enfant peut agir en conséquence. Il s'agit de la manière standard d'interagir avec un enfant.
Parent-Component
public inputToChild: Object;
Parent-HTML
<child [data]="inputToChild"> </child>
Child-Component: @Input() data;
ngOnChanges(changes: { [property: string]: SimpleChange }){
// Extract changes to the input property by its name
let change: SimpleChange = changes['data'];
// Whenever the data in the parent changes, this method gets triggered. You
// can act on the changes here. You will have both the previous value and the
// current value here.
}
- Concept de service partagé
Créer un service et utiliser un observable dans le service partagé. L'enfant s'y abonne et chaque fois qu'il y a un changement, l'enfant sera notifié. C'est également une méthode populaire. Lorsque vous voulez envoyer quelque chose d'autre que les données que vous passez en entrée, vous pouvez l'utiliser.
SharedService
subject: Subject<Object>;
Parent-Component
constructor(sharedService: SharedService)
this.sharedService.subject.next(data);
Child-Component
constructor(sharedService: SharedService)
this.sharedService.subject.subscribe((data)=>{
// Whenever the parent emits using the next method, you can receive the data
in here and act on it.})
4 votes
Il suffit de modifier la valeur d'une expression transmise en tant que Input au composant enfant, et ce dernier la recevra (et sera informé par ngOnChanges). Vous pouvez également émettre un événement en utilisant un service partagé qui possède un Observable.