Oui, vous pouvez définir les entrées des composants affichés via les prises de routeur . Malheureusement, vous devez le faire par programme, comme mentionné dans d'autres réponses. Il y a une grande mise en garde à cela lorsque des observables sont impliqués (décrit ci-dessous).
Voici comment:
(1) Connectez-vous à l' activate
événement du routeur-sortie dans le modèle parent:
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(2) Basculez vers le fichier dactylographié du parent et définissez les entrées du composant enfant par programme à chaque fois qu'ils sont activés:
onOutletLoaded(component) {
component.node = 'someValue';
}
La version ci-dessus de onOutletLoaded
est simplifiée pour plus de clarté, mais ne fonctionne que si vous pouvez garantir que tous les composants enfants ont exactement les mêmes entrées que vous affectez. Si vous avez des composants avec des entrées différentes, utilisez des protections de type:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
Pourquoi cette méthode peut-elle être préférée à la méthode de service?
Ni cette méthode ni la méthode de service ne sont «la bonne façon» de communiquer avec les composants enfants (les deux méthodes s'éloignent de la liaison de modèle pure), il vous suffit donc de décider de la manière la plus appropriée pour le projet.
Cependant, cette méthode vous permet d'éviter de créer l'objet intermédiaire (le service), qui couple étroitement le service et les composants enfants. Dans de nombreux cas, cela semble plus proche de la «voie angulaire» car vous pouvez continuer à transmettre des données à vos composants enfants via @Inputs. C'est également un bon choix pour les composants déjà existants ou tiers que vous ne voulez pas ou ne pouvez pas associer étroitement à ce service. D'un autre côté, cela peut ressembler moins à la manière angulaire lorsque ...
Caveat
La mise en garde avec cette méthode est que puisque vous passez des données par programme, vous n'avez plus la possibilité de transmettre des données observables dans votre modèle (surprise!). Cela signifie que vous perdez l'énorme avantage de la gestion angulaire du cycle de vie de l'observable pour vous lorsque vous utilisez le modèle pipe-async.
Au lieu de cela, vous devrez configurer quelque chose pour obtenir les valeurs observables actuelles chaque fois que la onChildLoaded
fonction est appelée. Cela nécessitera probablement également un démontage de la onDestroy
fonction du composant parent . Ce n'est rien de trop inhabituel, il y a d'autres cas où cela doit être fait, comme lors de l'utilisation d'un observable qui n'atteint même pas le modèle.
node
endroit où il est en tant que typestring
et cela ne semble pas fonctionner ou je fais quelque chose de mal