본문 바로가기
vue.js

같은 컴포넌트 레벨간의 통신

by 신방동불주먹 2023. 1. 11.
  • AppContent ->(event) ->  Root -> (props) ->  AppHeader 로 보내준다. 

1) 버튼 클릭시 pass 이벤트가 넘어가는지

2) root에 data num이 잘 변경되는지

3) AppHeader에 props가 잘 넘어오는지 

 

 

1. AppContent -> Root : event emit (pass가 올라옴)

2. Root 에 변경된 값 전달. 

3. Root -> AppHeader : props로 값 전달 

<body>
  <div id="app">
    <app-header v-bind:propsdata="num"></app-header>
    <app-content v-on:pass="deliverNum"></app-content> //3.여기에 pass이벤트가 올라옴
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var appHeader = {
      template: '<div>header</div>',
    }
    var appContent = {
      template: '<div>content<button v-on:click="passNum">pass</button></div>', //1. 버튼을 클릭하면 
      methods: {
        passNum: function() {
          this.$emit('pass', 10); //2.passNum 메소드가 실행되고 pass이벤트까지 넘어가면서 10이 넘어감.
        }
      }
    }

    new Vue({ //2. app-component의 상위 컴포넌트인 root에 data에 num을 선언 
      el: '#app',
      components: {
        'app-header': appHeader,
        'app-content': appContent
      },
      data: {
        num: 0
      },
      method:}
      
    })
  </script>
<body>
  <div id="app">
    <app-header v-bind:propsdata="num"></app-header> //5.상위 root에 넘어간 변경된 num 값 props로 전달받기 
    <app-content v-on:pass="deliverNum"></app-content> //4.pass 이벤트 받고 deliverNum실행 num값변경
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var appHeader = {
      template: '<div>header</div>',
      props: ['propsdata']
    }
    var appContent = {
      template: '<div>content<button v-on:click="passNum">pass</button></div>', //1. pass버튼을 클릭하면
      methods: {
        passNum: function() { //2. passNum메소드가 실행되고 
          this.$emit('pass', 10);  //3.pass 메서드가 넘어가면서 10 전달
        }
      }
    }

    new Vue({
      el: '#app',
      components: {
        'app-header': appHeader,
        'app-content': appContent
      },
      data: {
        num: 0
      },
      methods:{
        deliverNum : function(value){
          this.num = value;
        }
      }

    }) 
  </script>
</body>

'vue.js' 카테고리의 다른 글

액시오스(Axios)  (0) 2023.04.20
뷰 라우터  (0) 2023.04.19
뷰 인스턴스에서의 this  (0) 2023.01.11
컴포넌트 통신 - event emit  (0) 2023.01.11
컴포넌트 통신 - props  (0) 2023.01.10