๐ Language/Vue
[Age of Vue] Vue.js ์์ํ๊ธฐ - 18. ์ปดํฌ๋ํธ ํต์ ๋ฐฉ์ - ์์ฉ
a n u e
2022. 5. 6. 23:02
๊ฐ์ ์ปดํฌ๋ํธ ๋ ๋ฒจ ๊ฐ์ ํต์ ๋ฐฉ๋ฒ
- ์ํ์ ๊ฐ ์ปดํฌ๋ํธ ํต์ ์ด ์๋, ๊ฐ์ ๋ ๋ฒจ ์ปดํฌ๋ํธ ๊ฐ์ ํต์ ์ ์ด๋ป๊ฒ ํด์ผํ ๊น?
๊ฐ์ ๋ ๋ฒจ๋ผ๋ฆฌ๋ ๋ฐ๋ก ํต์ ํ ์ ์์ผ๋, ์์ ์ปดํฌ๋ํธ์ธ Root๋ก ์ฌ๋ฆฌ๊ณ (event), Root์์ ๋ด๋ ค์ผํ๋ค(props).
[Root]
[AppHeader] ← [AppCotent]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
{{ str }}
<app-header v-bind:propsdata="num"></app-header>
<!-- 2. ์ฌ๋ผ์จ pass event๋ฅผ v-on์ผ๋ก ๋ฐ์ ์ ์๋ค. -->
<!-- ๊ทธ๋ฆฌ๊ณ pass event๋ฅผ ๋ฐ์ผ๋ฉฐ ์ํํ function์ ์ ์ธํ ์ ์๋ค.
app-content์ ์์ ์ปดํฌ๋ํธ ์ฆ, Root์์ ์คํ ํ method๋ฅผ ์ ์ธ.
deliverNum(value)์ผ๋ก, value์ ์์์ ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ๋
์๋ฌต์ ์ผ๋ก ์ ์ธ์ด ๋๋ค -->
<app-content v-on:pass="deliverNum"></app-content>
</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>',
methods : {
passNum : function() {
// 1. pass๋ผ๋ ์ด๋ฆ์ event๊ฐ Root๋ก ์ฌ๋ผ์ด
this.$emit('pass', 10);
}
}
}
//Root
//์ฌ๊ธฐ์ data๋ฅผ ์ ์ธํด์ผ ์๋๋ก propsํ ์ ์๋ค.
new Vue(
{
el : '#app',
data : {
num : 0
},
components : {
'app-header' : appHeader,
'app-content' : appContent
},
methods : {
//์ธ์ value=10์๋ฏธ
deliverNum : function(value)
{ //3. this.num์ด 10์ด ๋์๋ค.
//์ด ๋ฐ์ดํฐ๋ฅผ appHeader๋ก ์ ๋ฌํด์ฃผ๋ฉด, ๊ฐ์ ๋ ๋ฒจ์ ๋ฐ์ดํฐ ์ ์ก ์๋ฃ
this.num = value;
}
}
}
)
</script>
</body>
</html>