0
votes

Est-il possible d'envoyer un événement d'un composant à un autre sans utiliser d'événements globaux dans VUE.JS?

J'ai deux composantes qui n'ont pas de relation parent - enfant. Ils ne sont pas liés les uns aux autres. Mais j'essaie de le faire pour que lorsqu'un événement soit émis d'un composant, l'autre composant peut écouter cet événement et effectuer une action.

Voici un exemple, disons que j'ai un composant appelé "réinitialisation composant "et à un moment donné, il émettra un événement appelé" réinitialiser ". p> xxx pré>

et j'ai également un" composant de grille "qui devrait écouter l'action" Réinitialiser " émis par le "composant de réinitialisation" et effectuer une action. P>

// Reset component
EventBus.$emit('reset')

// Grid component
created()
{
    EventBus.$on('reset', () => {
        doSomething()
    })
}


1 commentaires

Envisager d'utiliser VUEX (Global State Manager) pour éviter des problèmes comme celui-ci


5 Réponses :


0
votes

Vous pouvez utiliser Sujet pour y accomplir. Voir ce lien pour plus d'informations: VUE.JS + RXJS - Communiquer entre les composants avec Observable et Sujet


1 commentaires

C'est une sorte de la même idée qu'un émetteur / écouteur d'événement mondial



0
votes

Vous avez en réalité plusieurs options. Mais comme vous avez déjà répondu à vous-même, un bus d'événement global est l'un d'entre eux

dans votre fichier principal (supposez quelque chose comme Main.Js), vous pouvez faire P>

created () {
  this.$bus.$on('reset', this.doReset)
}


3 commentaires

Je suis d'accord, mon application est si petite qu'il n'y a aucune raison d'apporter une grande bibliothèque comme Vuex, donc je cherchais des alternatives. On dirait que la seule option vraie viable est un bus global ..


Y a-t-il un problème avec un bus d'événement mondial?


J'ai entendu dire que cela s'appelle un anti-modèle car il est difficile de comprendre où les événements proviennent d'un bus d'événement mondial.



0
votes

Lorsque vous passez des accessoires aux composants enfants et les événements émettrices aux composants des parents deviennent durs en raison de la complexité de distance ou de l'application, vous pouvez utiliser VUEX: https://vuex.vuejs.org/


1 commentaires

Eh bien, mon application est très petite, donc je ne voulais pas apporter une grosse bibliothèque comme VUEX pour cette tâche.



0
votes

Vous pouvez également simplement ajouter aux instances hameçons:

réinitialisant. $ sur ("réinitialiser", dosmth)

VM. $ sur

Mais je suppose que cela créera une relation.


0 commentaires

0
votes

Oui, vous pouvez utiliser vm. $ sur et vm. $ émet dans les composants.

dans votre réinitialiser-composant Déclenchez l'événement de n'importe quelle méthode ou élément

ceci. $ EMIT ('RESET')

Et puis vous pouvez alors l'écouter,


0 commentaires