자식component에서 부모component로 이벤트를 전달하는 방법은 두가지가 있다.
부모
<div id="app" v-cloak>
<div id="parkList">
<pl-item
v-for="plItem in plList"
:pl-item="plItem"
:key="plItem.park_id"
@click="onGoLink"
>
</pl-item>
</div>
</div>
<script type="module">
import { createApp, ref, onMounted, reactive } from "vue"
const app = createApp({
setup() {
const plList = ref([])
function onGoLink(parkNm) {
console.log(`/${_areaId}/${_itvlSec}/${parkNm}/`)
//location.href = `/${_areaId}/${_itvlSec}/${parkNm}/`
}
return {
plList,
onGoLink
}
},
})
.component("pl-item", VueUtil.loadModule(`/static/vue/${_areaId}/pl-item.vue`))
.mount("#app")
</script>
1. 자식 component에서 $emit으로 직접 전달히기
자식
<template>
<div class="parkItem">
<div class="parkBox">
<span class="parkNm"><a href="javascript:void(0)" @click="$emit('click', plItem.park_nm)">{{ plItem.park_nm }}</a></span>
</div>
</div>
</template>
<script>
export default {
props: {
plItem: Object
},
emits: ["click"],
setup(props, context) {
},
mounted() {
},
}
</script>
2. 자식 component에서 method로 전달하기
자식
<template>
<div class="parkItem">
<div class="parkBox">
<span class="parkNm"><a href="javascript:void(0)" @click="click(plItem.park_nm)">{{ plItem.park_nm }}</a></span>
</div>
</div>
</template>
<script>
export default {
props: {
plItem: Object
},
emits: ["click"],
setup(props, context) {
function click(name)
{
context.emit("click", name);
}
return {
click
}
},
mounted() {
},
}
</script>
자식 componet에서 이벤트를 선언하여 a tag의 네이티브 이벤트인 href cllick이벤트는 부모 component로 전달이 안되도록 한다.
이게 없다면 파라메타 없는 이벤트가 한번 더 부모 component로 전달된다.
emits: ["click"],
참조 : https://ko.vuejs.org/guide/components/events.html