๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/Vue

๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹ 

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2022. 6. 6.
๋ฐ˜์‘ํ˜•
<!DOCTYPE html>
<head>
  <title>EventBus</title>
</head>
<body>
  <div id="app">
    <child-component></child-component>
  </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var eventBus = new Vue()
    Vue.component('child-component', {
      template: '<div>ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ์˜์—ญ์ž…๋‹ˆ๋‹ค.<button v-on:click="showLog">show</button></div>',
      methods: {
        showLog: function() {
          eventBus.$emit('triggerEventBus', 100)
        }
      }
    })

    var app = new Vue({
      el: '#app',
      created: function() {
        eventBus.$on('triggerEventBus', function(value) {
          console.log("์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ๋ฐ›์Œ. ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’ : ", value)
        })
      }
    })
  </script>
</body>
</html>

 

 

<์ฒ˜๋ฆฌ ๊ณผ์ •>
1. ๋จผ์ € ์ด๋ฒคํŠธ ๋ฒ„์Šค๋กœ ํ™œ์šฉํ•  ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ 1๊ฐœ ์ƒ์„ฑํ•˜๊ณ , eventBus๋ผ๋Š” ๋ณ€์ˆ˜์— ์ฐธ์กฐํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด eventBus๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๋Š” template ์†์„ฑ๊ณผ methods ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค. template ์†์„ฑ์—๋Š” 'ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ์˜์—ญ์ž…๋‹ˆ๋‹ค'๋ผ๋Š” ํ…์ŠคํŠธ์™€ show ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. methods ์†์„ฑ์—๋Š” showLog() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ฉ”์„œ๋“œ ์•ˆ์—๋Š” eventBus.$emit()์„ ์„ ์–ธํ•˜์—ฌ triggerEventBus๋ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ์ด๋ฒคํŠธ๋Š” ๋ฐœ์ƒํ•  ๋•Œ ์ˆ˜์‹ ํ•˜๋Š” ์ชฝ์— ์ธ์ž ๊ฐ’์œผ๋กœ 100์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.

3. ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ created ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์— eventBus.$on()์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š” ๋กœ์ง์„ ์„ ์–ธํ•œ๋‹ค. ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ triggerEventBus๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ ์•ž์—์„œ ์ „๋‹ฌํ•œ ์ธ์ž ๊ฐ’ 100์ด ์ฝ˜์†”์— ์ถœ๋ ฅ๋œ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€