- 뷰 컴포넌트는 각각 고유한 데이터 유효범위를 갖는다.
- 따라서, 컴포넌트 간에 데이터를 주고받기 위한 규칙이 존재한다.
데이터의 흐름(Props/Event)을 추정할 수 있다.
※ Props : 상위에서 하위로 데이터를 내려준다. / props를 전달한다.
※ Event emit : 하위에서 상위로 이벤트를 올려준다. / 이벤트가 발생한다.
- 컴포넌트 간에 데이터를 전달할 수 있는 컴포넌트 통신 방법
- 상위컴포넌트에서 하위 컴포넌트로만 이동!!
▷ 상위컴포넌트의 HTML 코드
<child-component v-bind: props 속성이름 = "상위컴포넌트 data이름"></child-component>
▷ 하위컴포넌트의 props 속성 정의
Vue.component('child-component', {
props: [ 'props 속성이름' ]
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<body>
<div id="app">
<!--<app-header v-bind:프롭스 속성 이름 ="상위 컴포넌트의 데이터 이름"></app-header>-->
<app-header v-bind:propsdata ="message"></app-header>
<app-content v-bind:propsdata ="num"></app-content>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var appHeader = {
template: '<h1>{{ propsdata }}</h1>',
props: ['propsdata']
}
var appContent = {
template: '<div>{{ propsdata }}</div>',
props: ['propsdata']
}
new Vue({
el: '#app',
components: {
'app-header': appHeader,
'app-content': appContent
},
data:{
message: 'hi',
num : 10
}
});
</script>
</body>
|
cs |
- 하위컴포넌트에서 상위 컴포넌트로 이벤트를 발생시키는 통신 방법
- 이벤트 발생은 $emit( )을 사용, 이벤트 수신은 v-on: 속성 을 사용
▷이벤트 발생 : 하위컴포넌트의 특정 메소드 내부
this.$emit('이벤트명');
▷ 이벤트 수신
<child-component v-on: 이벤트명 = "상위컴포넌트 method명"></child-component>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<body>
<div id="app">
<!--<app-header v-on:하위 컴포넌트에서 발생한 이벤트 이름="상위 컴포넌트의 메소드 이름"></app-header>-->
<app-header v-on:pass="logText"></app-header>
<app-content v-on:add="logNum"></app-content>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var appHeader ={
template: '<button v-on:click="passOn">click me</button>',
methods: {
passOn: function(){
this.$emit('pass');
}
}
}
var appContent ={
template: '<button v-on:click="addNumber">add</button>',
methods: {
addNumber: function(){
this.$emit('add');
}
}
}
new Vue({
el: '#app',
components: {
'app-header': appHeader,
'app-content': appContent
},
data: {
num: 10
},
methods:{
logText: function () {
console.log('hi');
},
logNum: function(){
++this.num;
console.log(this.num);
}
}
});
</script>
</body>
|
cs |
[Vue] Vue 라우터 (0) | 2021.09.20 |
---|---|
[Vue] 컴포넌트 통신방식 응용(동일레벨 컴포넌트 / 이벤트 버스) (0) | 2021.09.19 |
[Vue] Vue 컴포넌트 (0) | 2021.09.16 |
[Vue] Vue 인스턴스 (0) | 2021.09.15 |
[Vue] Vue 프로젝트 구조 알아보기 (0) | 2021.09.13 |