본문 바로가기
공부-프레임워크, 개발도구/Vue

Vue- 컴포넌트간의 통신

by 령과 2022. 10. 6.

컴포넌트 기본개념

  • 같은 페이지에 구성되어있는 컴포넌트라도 데이터를 공유하기는 어렵다. 각자의 유효범위가 존재함
  • 컴포넌트간의 통신 방법에는 상.하위 컴포넌트 관계, 같은 레벨의 컴포넌트 간 통신으로 구분

 

상.하위 컴포넌트간의 데이터 전달

  • 상위 -> 하위 : props 전달
  • 하위 -> 상위: 이벤트 발생

 

상위->하위 컴포넌트 데이터전달 예제코드

<!-- script부분-->
new Vue({
	el: '#app',
    data: {
    	meg: 'hello'
    }
});

Vue.component('child',{
	props: ['data'],
    template: '<p>{{data}}</p>',
});


<!--html부분-->
<div id="app">
	<child v-bind:data="meg"></child>
</div>
  • #app 컴포넌트영역의 msg는 hello값을 가진다.
  • child컴포넌트는 #app안에 구성되어있는 전역컴포넌트이다. 또한 하위 컴포넌트이다.
  • child컴포넌트는 v-bind로 정의된 data값을 다룰 수 있게된다.
  • 여러 data를 받으려면 v-bind: data1="meg1" v-bind: data2="meg2" 이렇게 여러번 선언해야 한다.
  • vue인스턴스 안에 컴포넌트를 등록하면 -> 하위 컴포넌트가 된다.

 

하위 -> 상위 컴포넌트 이벤트 전달

  • 하위 컴포넌트는 상위로 이벤트를 발생시켜 상위 컴포넌트에게 신호를 보낼 수 있다.
  • $emit : v-on으로 명시해준 상위 컴포넌트 메서드명이 담긴 이벤트명을 이용해서 상위 컴포넌트 이벤트 발생
<!-- script부분  -->
Vue.component('child',{
	template: '<button v-on:click="child_method">click</button>',
    method:{
    	child_method: function(){
        	this.$emit('v-on-name');
        }
    }
});

new Vue({
	el:'#app',
    data:{msg: 'hello'},
    method:{
    	Hello: function(){
        	console.log("hello")
        }
    }
});

<!-- html부분 -->
<div id="app">
	<child v-on:v-on-name="Hello"></child>
</div>
  • app컴포넌트에 선언된 하위 컴포넌트에서 v-on:v-on-name="Hello"로 실행하고자 하는 메소드를 지정하는 것이다.

 

관계없는 컴포넌트 간 통신 - 이벤트 버스

<!-- script부분 -->
var Bus = new Vue();
Vue.component('child',{
	template: '<button v-on:click="Triger">클릭</buttion>',
    method:{
    	Triger: function(){
        	Bus.$emit('triger1',100);
        }
    }
});

new Vue({
	el:'#app',
    created: function(){
    	Bus.$on('triger1',function(value){
        	console.log(value);
        });
    }
});



<!-- html부분 -->
<div id="app">
	<child></child>
</div>
  • Bus 역할을 할 new Vue() 변수 하나 선언
  • Bus.$emit('트리거 이름', 데이터) -> Bus.$on('트리거이름',처리함수) 식으로 처리가능함
  • 이런 형식은 규모가 커지면 관리가 어려워지므로 Vuex 상태 관리 도구를 사용

 

'공부-프레임워크, 개발도구 > Vue' 카테고리의 다른 글

Vue - computed, methods, watch 속성  (0) 2022.10.07
Vue- 자주쓰이는 디렉티브  (0) 2022.10.06
Vue-라우터 사용법  (0) 2022.10.06
Vue- 컴포넌트  (0) 2022.10.04
Vue 입문  (0) 2022.10.04

댓글