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/



