Vue des composants de communication
J'ai deux Vue des composants:
Vue.component('A', {});
Vue.component('B', {});
Comment puis-je accéder à Un composant du composant B? Comment fonctionne la communication entre les composants?
- Vous pouvez utiliser un événement mondial de bus à $émettent des événements lorsqu'un composant changements. Lorsqu'un événement est émis utiliser $à répondre à ces changements et mettre à jour le composant en conséquence. J'ai écrit un tutoriel ici qui communique entre les trois composantes et l'api google maps: blog.jscrambler.com/...
Vous devez vous connecter pour publier un commentaire.
De la croix-composant de communication ne reçoit pas beaucoup d'attention dans les Vue.js docs, ni qu'il existe de nombreux tutoriels qui traitent de ce sujet. En tant que composants doivent être isolés, vous ne devriez jamais "l'accès" à un composant directement. Cela permettrait d'associer étroitement l'ensemble des composants, et c'est exactement ce que vous voulez éviter.
Javascript a une excellente méthode pour la communication, l'événementiel. Vue.js intégré dans le système d'événements, principalement utilisé pour la communication parent-enfant. À partir de la documentation:
Leur code d'exemple pour illustrer le système d'événement:
Dan Holloran a récemment écrit un article sur son "combat" avec la croix-composant de messagerie, dans deux pièces. Cela peut être utile pour vous, si vous avez besoin de communication entre les composants qui n'ont pas de relation parent-enfant.
Une autre approche que j'ai de l'expérience avec les (autres qu'à l'aide d'événements pour la communication), est à l'aide d'un élément central de registre qui a une référence à l'API publique avec une instance d'un composant lié à elle. Le registre gère les demandes pour un composant et retourne son API publique.
Dans le contexte de Vue.js, événements par mon arme de choix.
$dispatch
et$broadcast
ont été dépréciées.En plus de pesla réponse jetez un oeil au guide de l' La Gestion de l'état en vertu de la section Construction à grande échelle des applications: http://vuejs.org/guide/application.html#State_Management . J'ai créé un jsfiddle basé sur ce ici: https://jsfiddle.net/WarwickGrigg/xmpLg92c/.
Cette technique fonctionne pour les composants trop: parent-enfant, frère ou sœur-frère composant relations etc.
La Communication entre les composants peuvent aussi être établis par la création d'un seul événement mondial hub dans votre Vue de l'application. Quelque chose comme ceci:-
var bus = new Vue();
Maintenant, vous pouvez créer des événements personnalisés et de les écouter sur n'importe quel composant.
Plus à ce sujet peut être trouvé à partir de la documentation officielle..
bus
devront être d'une certaine manière visible pour tous les composants. J'utilise un mondialWindow
variable (ce qui est dit être une mauvaise idée) que je ne pouvais pasimport
dans un mode de travailIl est préférable d'utiliser
props
etevents
.Il existe de nombreux exemples en ligne, comme:
Je recommande un peu de lecture sur le sujet.
Si les composants sont frères et sœurs et n'ont pas de relation parent-enfant, il pourrait être utile de vérifier l'architecture de votre application.
A
etB
ont une relation de parent-enfant?C
qui est peut-être le parent deA
etB
?Si
A
etB
sont des enfants deC
, pensez à utiliser des accessoires et des événements.Une autre façon est d'utiliser des
props
etsync
, ce qui peut être utile pour les données de formulaire:Pour les frères et sœurs de la communication, j'ai trouvé à l'aide de la mère comme un événement de bus fait la logique relativement trivial. À l'aide de
$root
comme un événement de bus signifiait code supplémentaire pour vérifier la portée de composants qui peuvent ne pas être directe, les frères et sœurs. À l'aide de la$parent
signifie que la portée des événements de rayonnement peut être contrôlée.L'exemple suivant est un
TableHeader
composant. Quand vous cliquez dessus, re-commandes les données dans un tableau, d'autres en-têtes ne sont plus actifs et ne doit pas être affiché en tant que tel, d'une propriété calculéecssClass
est utilisé pour cela.