์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ์์ ์ปดํฌ๋ํธ์ ์ ํธ๋ฅผ ๋ณด๋ด๋ฉด ๋๋ค.
์์ ์ปดํฌ๋ํธ์์ ํ์ ์ปดํฌ๋ํธ์ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ฐ ํ์ ์ปดํฌ๋ํธ์์ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์์ ์ปดํฌ๋ํธ์์ ํด๋น ์ด๋ฒคํธ๋ฅผ ์์ ํ์ฌ ์์ ์ปดํฌ๋ํธ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
์ด๋ฒคํธ ๋ฐ์๊ณผ ์์ ์ $emit()๊ณผ v-on: ์์ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
// ์ด๋ฒคํธ ๋ฐ์
this.$emit('์ด๋ฒคํธ๋ช
')
$emit์ ํธ์ถํ๋ฉด ๊ดํธ ์์ ์ ์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก $emit()์ ํธ์ถํ๋ ์์น๋ ํ์ ์ปดํฌ๋ํธ์ ํน์ ๋ฉ์๋ ๋ด๋ถ์ด๋ค.
๋ฐ๋ผ์ $emit()์ ํธ์ถํ ๋ ์ฌ์ฉํ๋ this๋ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
// ์ด๋ฒคํธ ์์
<child-component v-on:์ด๋ฒคํธ๋ช
="์์ ์ปดํฌ๋ํธ์ ๋ฉ์๋๋ช
"></child-component>
ํธ์ถํ ์ด๋ฒคํธ๋ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฑ๋กํ๋ ํ๊ทธ์์ v-on: ์ผ๋ก ๋ฐ๋๋ค. ํ์ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ช ์ v-on: ์์ฑ์ ์ง์ ํ๊ณ , ์์ฑ์ ๊ฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถ๋ ์์ ์ปดํฌ๋ํธ์ ๋ฉ์๋๋ฅผ ์ง์ ํ๋ค.
<!DOCTYPE html>
<head>
<title>Event emit</title>
</head>
<body>
<div id="app">
<child-component v-on:show-log="printText"></child-component2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
Vue.component('child-component', {
template: '<button v-on:click="showLog">show</button>',
methods: {
showLog: function() {
this.$emit('show-log')
}
}
})
var app = new Vue({
el: '#app',
data: {
message: "Hello Vue! passed from Parent Component"
},
methods: {
printText: function() {
console.log('received an event')
}
}
})
</script>
</body>
</html>
<์ฒ๋ฆฌ ๊ณผ์ >
1. show ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํด๋ฆญ ์ด๋ฒคํธ v-on:click="showLog"์ ๋ฐ๋ผ showLog() ๋ฉ์๋๊ฐ ์คํ๋๋ค.
2. showLog() ๋ฉ์๋ ์์ this.$emit('show-log')๊ฐ ์คํ๋๋ฉด์ show-log ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
3. show-log ์ด๋ฒคํธ๋ <child-component>์ ์ ์ํ v-on:show-log์ ์ ๋ฌ๋๊ณ , v-on:show-log์ ๋์ ๋ฉ์๋์ธ ์ต์์ ์ปดํฌ๋ํธ์ ๋ฉ์๋ printText()๊ฐ ์คํ๋๋ค.
4. printText()๋ received an event๋ผ๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ ๋ฉ์๋์ด๋ฏ๋ก ๋ง์ง๋ง์ผ๋ก ์ฝ์์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
'JavaScript > Vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue router (0) | 2022.06.06 |
---|---|
๊ฐ์ ๋ ๋ฒจ์ ์ปดํฌ๋ํธ ๊ฐ ํต์ (0) | 2022.06.06 |
์์์์ ํ์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ ์ ๋ฌํ๊ธฐ : props (0) | 2022.06.05 |
์ปดํฌ๋ํธ ๊ฐ ํต์ ๊ณผ ์ ํจ ๋ฒ์ (0) | 2022.06.05 |
์ธ์คํด์ค ์ ํจ ๋ฒ์์ ์ง์ญ ์ปดํฌ๋ํธ, ์ ์ญ ์ปดํฌ๋ํธ ๊ฐ ๊ด๊ณ (0) | 2022.06.05 |
๋๊ธ