Faire passer une donnée du parent vers l'enfant
Documentation : https://angular.io/guide/component-interaction#pass-data-from-parent-to-child-with-input-binding
- Reprendre la liste de users de l'exercice précédent
- Créer un composant 'user-item'
- Remplacer le tag 'li' par 'app-user-item' (le selector du composant 'user-item')
- Faire passer chaque user aux composants 'user-item'
- Pour ce faire, vous devez créer un attribut 'userInfo' sur le selector 'app-user-item' et lui passer la donnée user. (ex.
<app-user-item [userInfo]="u" *ngFor="let u of users"></app-user-item>
) - Afin de récupérer la donnée de l'attribur dans le composant enfant, vous devez créer une propriété qui correspond au nom de l'attribut avec le decorator '@Input()'. (ex.
@Input() userInfo
)
https://github.com/davidostermann/LPST-Angular-templates/tree/master/src/app
A partir de l'exercice précédent, nous desirons déclencher la fonction 'selectUser' du parent 'users' à partir d'un click sur une partie de 'user-item'.
Documentation : https://angular.io/guide/component-interaction#parent-listens-for-child-event
Pour ce faire :
- Reprenez l'exercice précédent
- Modifier le composant 'user-item' afin de poser un (click) sur une partie de l'element.
- Exposer un eventEmitter avec @output
- Associer une fonction du parent à l'eventEmitter exposé.
https://github.com/davidostermann/LPST-Angular-templates/tree/master/src/app
A partir de l'exercice précédent, nous desirons isoler le detail de user dans un composant 'user-detail' afin de pouvoir placer ce composant où bon nous semble (par exemple à l'extérieur du composant 'users').
Afin que notre application continue à fonctionner, il faut partager une variable 'selectedUser' entre 'users' et 'user-detail'.
Pour ce faire, vous devez :
- Créer un service 'users'
- Ajouter une propriété 'selectedUser' au service
- Injecter le service dans les composant 'users' et 'user-detail'
- remplacer this.selectedUser par userService.selectedUser dans les 2 composants
https://github.com/davidostermann/LPST-Angular-templates/tree/master/src/app