# BusEvent
Dependendo da situação exige a necessidade de uma solução rápida e fácil para transmitir dados entre os componentes do Vue.
Existe o Vuex para gerenciamento centralizado do estado. Assim, pode fornecer ao aplicativo uma única fonte de verdade.
Mas para um aplicativo com arquitetura simples, basta comunicar-se entre componentes usando eventos. Para isso, podemos criar uma solução rápida e implementar o EventBus. Ele nos permite emitir um evento em um componente filho para outro componente filho(ambos possuindo o mesmo pai).
Primeiro de tudo, precisamos de um mecanismo para transferir eventos entre componentes. Devido à simplicidade do Vue, ele nos permite criar uma nova instância com facilidade:
// ./src/event-bus.js
import Vue from 'vue';
const EventBus = new Vue();
export default EventBus;
Aqui temos um componente que importa o Vue e o EventBus. Quando o método emitirEvento do componente é chamado, ele emite um novo evento chamado FORMULARIO e passa uma carga útil junto com ele.
// primeiro-componente.js
import Vue from 'vue';
import EventBus from './event-bus';
Vue.component('primeiro-componente', {
...
methods: {
emitirEvento() {
EventBus.$emit('FORMULARIO', {
nome: 'João',
email: 'joao@hotmail.com'
});
}
}
});
- O exemplo acima funcionaria normalmente em um .vue.
Em outro componente, podemos registrar um ouvinte que escuta o evento FORMULARIO a ser transportado usando o EventBus. Assim que o evento aparecer, podemos executar o JavaScript com o payLoad recebido como argumento.
// segundo-componente.js
import Vue from 'vue';
import EventBus from './event-bus';
Vue.component('segundo-componente', {
...
mounted () {
EventBus.$on('FORMULARIO', payload => {
console.log(payload.nome, payload.email);
});
}
});
E pronto! Dessa forma conseguimos comunicar dois componentes filhos se a necessidade de anexar o fluxo de ambos os componentes.
Para anexar os componentes:
<script>
import PrimeiroComponente from './primeiro-componente';
import SegundoComponente from './segundo-componente';
export default: {
components: {
PrimeiroComponente,
SegundoComponente
}
}
</script>
Na próxima seção iremos de apresentar as transições, te vemos lá!