Blog

Event Bus

EventBus

์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ ๋“ฑ์ด ์ •์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
ํ•˜์ง€๋งŒ, ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ •ํ•ด์ง„ ๊ทœ๊ฒฉ์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด ๋œ๋‹ค
๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒญ์ทจ(on) ํ•˜๊ณ  ์žˆ์œผ๋ฉด, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ(emit) ์‹œํ‚ฌ ๋•Œ ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
// ์ด๋ฒคํŠธ ๋ฒ„์Šค ์ƒ์„ฑ let EventBus = new Vue() // ์ด๋ฒคํŠธ ์ฒญ์ทจ EventBus.$on('my-event', (message) => {console.log(message)}) // ์ด๋ฒคํŠธ ๋ฐœ์ƒ EventBus.$emit('my-event', '๋พฐ๋กœ๋กฑ๋พฐ๋กฑ ๋พฐ๋กœ๋กœ๋กฑ');
JavaScript
๋ณต์‚ฌ

์˜ˆ์ œ

<div id="sender-app"> <input type="text" v-model="text"> <button @click.prevent="sendMessage">์ „์†ก</button> </div> <div id="receiver-app"> <p v-if="text">receiver: {{ text }}</p> </div>
HTML
๋ณต์‚ฌ
let EventBus = new Vue() let SenderApp = new Vue({ el: '#sender-app', data () { return {text: ''} }, methods: { sendMessage () { EventBus.$emit('message', this.text) } } }) let ReceiverApp = new Vue({ el: '#receiver-app', data () { return {text: ''} }, created () { EventBus.$on('message', (text) => {this.text = text}) } })
JavaScript
๋ณต์‚ฌ
์œ„์˜ ์˜ˆ์‹œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“œ์‹œ SenderApp, ReceiverApp์ด ๋‹ค๋ฅธ App ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค

EventBus plugin

let EventBusPlugin = {} EventBusPlugin.install = (Vue, options) => { const eventBus = new Vue() Vue.eventBus = eventBusVue.prototype.$eventBus = eventBus } export default EventBusPlugin
JavaScript
๋ณต์‚ฌ
import EvnetBusPlugin from './plugins/bus' Vue.use(EvnetBusPlugin)
JavaScript
๋ณต์‚ฌ
<template> <p v-if="text">Receiver: {{ text }}</p> </template> <script> export default { name: 'my-component', data () { return { text: '' } }, created () { this.$eventBus.$on('message', (text) => { this.text = text }) } } </script> <style scoped> </style>
HTML
๋ณต์‚ฌ

์ฐธ๊ณ 

โ€ข
โ€ข
https://github.com/ClaudeSeo/TIL/blob/master/JavaScript/170507_vue_plugin.md
โ€ข
https://vuejs-kr.github.io/jekyll/update/2017/02/13/vuejs-eventbus/