Written by
최태열
on
on
Vue Component 데이터 교류
parent to child
component의 props를 활용할 수 있다.
<div id="app">
<child-component v-bind:parent_data_receive="supermessage"></child-component>
</div>
<script>
//자식 컴포넌트
Vue.component('child-component', {
props: ['parent_data_receive'], //대문자 사용 불가
template: '<p>제공받은 데이터 영역 : </p>'
});
//부모 컴포넌트
new Vue({
el: '#app',
data: {
supermessage: '부모가 제공한 데이터'
}
});
</script>
Vue에서 컴포넌트를 사용할 때, component에 값을 보내는 방법이다.
child to parent
$emit을 활용할 수 있다.
<div id="app">
<!-- <child-com v-on:event-name="발생된 이벤트로 인해 전송되는 데이터를 받는 부모단 메소드명"></child-com> -->
<child-com v-on:event-name="viewData"></child-com>
<div></div>
</div>
<script>
Vue.component("child-com", {
template: `<button v-on:click="showLog">데이터 보기</button>`,
methods: {
showLog: function () {
//(이벤트명, 데이터)
this.$emit('event-name', 'child가 제공하는 데이터');
}
}
});
new Vue({
el: "#app",
//자식이 제공해주는 데이터를 받는 변수(property, model) 선언
data: {
message: "부모데이터",
},
methods: {
viewData: function(value){
this.message = value;
}
}
});
</script>
$emit을 통해 특정 key에 데이터를 부여할 수 있고
그 key를 호출함으로써 자식 component의 데이터를 부모에서 사용할 수 있다.
EventBus
<div id="app">
1. 데이터 발신 : <com1></com1>
<hr>
2. 데이터 수신 : <com2></com2>
</div>
<script>
let eventBus = new Vue();
//발행 컴포넌트
Vue.component('com1', {
template: `<button v-on:click="showLog">버튼</button>`,
methods: {
showLog: function(){
eventBus.$emit('triggerEventBus', 100);
}
}
});
//수신 컴포넌트
Vue.component('com2', {
template: "#two",
data: function(){
return {message : []};
},
created: function(){
eventBus.$on('triggerEventBus', this.clickM);
console.log(1);
},
methods:{
clickM: function(v){
this.message.push(v);
}
}
});
new Vue({
el: "#app"
});
</script>
$emit 으로 eventBus로 선언한 vue 객체에 전송한다.
다른 객체에서 eventBus에 있는 해당 데이터를 가져와서 사용한다.
Discussion and feedback