0
votes

Comment obtenir la valeur de la variable d'un autre composant, pas d'enfant?

J'ai essayé d'obtenir une valeur de variable de composant dialogdicationAiSeypesComponce à l'aide de ce: xxx

DialogDictionMeSypesPomponent a: xxx

pourquoi je reçois une erreur: xxx


2 commentaires

Les composants de dialogue généralement ouverts de manière dynamique sur le portail. Dans ce cas, ce n'est pas le cas. enfant et @viewchild ne peut pas le trouver. Si oui, lorsque vous ouvrez la boîte de dialogue, vous devez enregistrer la référence à la composante de la boîte de dialogue pour y accéder, mais une meilleure solution est une utilisation utilisée qui émettent à la fin de la boîte de dialogue et de retourner la valeur attendue.


Pouvez-vous montrer votre modèle?


3 Réponses :


0
votes

Vous devez probablement utiliser un sujet de service et de RXJS. Jetez un coup d'œil HTTPS: //jasonwatmore.com/post/2018/06/25/angular-6-CommunicationD-Between-Components-with-ObServable-subject


5 commentaires

Vous pouvez dire que @viewchild n'est utilisé que si un composant à l'intérieur d'une autre? mais non séparé:


Je ne veux pas utiliser `Rxjs Subject` aucune suggestion?


Toujours en utilisant un service de quelque sorte est le moyen d'aller ici. Un service peut encore avoir son propre état avec votre type préféré, sans se limiter à un observable. Lisez sur Singleton Services ici: Angular.io/Guide/singleton-services


Vous pouvez également partager des données via le service.


@Jony sans rxjs Vous ne pouvez pas utiliser les changements d'observateurs effectués sur la propriété de dictionnaires.



1
votes

Lorsque vous utilisez ViewChild avec {statique: faux} La propriété est disponible dans (et après) le ngafterviewInit crochet xxx

Si vous en avez vraiment besoin dans le Ngoninit , vous pouvez définir statique sur vrai , mais soyez conscient que si vous avez une directive structurelle entourant votre enfant. composant, cela échouera.

Après avoir lu votre titre, je vois que le composant que vous recherchez est-pas d'enfant. Dans ce cas, vous devez utiliser un service et injecter ce service dans les deux composants.

ViewChild est uniquement utilisé pour obtenir une référence d'un composant ou d'une instance HTMLElement déclarée à l'intérieur de votre composant

En outre, votre première pensée d'accès à des données des composants est un peu défectueuse. Vous ne devriez jamais faire cela, car les composants sont simplement utilisés pour les vues et les interactions avec la vue et non pour le stockage de données. Essayez de les garder aussi bêtes que possible. xxx

Dans cet exemple, ces composants enregistreront le même tableau de dictionnaire. Ceci est cependant très rudimentaire et vous devriez vraiment regarder en utilisant des flux de données à l'aide de RXJS pour faciliter votre vie (peut-être même la gestion de l'État). Plus fort au début, je suis d'accord, mais une fois que vous avez eu la suspension, votre code sera très heureux avec vous.


3 commentaires

Je ne suis pas sûr de pouvoir accéder directement à une composante enfant comme ça.


Seulement dans ngafterviewinit ?


@Jony j'ai mis à jour ma réponse à plus soyez en ligne avec votre question :)



0
votes

dans les services angulaires servent à partager des données avec des composants.

Les composants ne doivent pas récupérer ou enregistrer directement des données et elles sont certainement ne devrait pas sciemment présenter de fausses données. Ils devraient se concentrer sur la présentation Données et déléguer l'accès des données à un service.

https://angular.io/taturial/toh-pt4

Je créerais un service aux données stockées dont j'ai besoin dans un composant différent n'est pas un enfant.


2 commentaires

Pour quoi il existe alors visualiskchild?


Comme son nom l'indique, il est utilisé pour accéder à des composants enfants en fonction de votre question, vous essayez d'accéder aux données d'un composant qui n'est pas un composant enfant à celui de votre choix. Si je peux demander, vos composants sont référencés par un séparé Composant parent? angular.io/api/core/viewchild#description En fonction de votre situation une autre façon de Partager des données entre les composants consiste à utiliser le décorateur @Output et à émettre des modifications à une variable accessible par d'autres composants NIVELUP.GITCONCONNECTECT.COM /.../a>