이벤트 자체를 하위 컴포넌트에 넘길 수 있다.
예를 들어
<template>
<MyBtnComponent @click="log">aaa</MyBtnComponent>
</template>
<script>
import MyBtnComponent from './components/MyBtnComponent.vue';
export default{
components:{
MyBtnComponent
},
methods:{
log(){
console.log("Clicked.");
}
}
}
이렇게 상위컴포넌트에서 MyBtnComponent에게 클릭이벤트를 추가시켰다.
근데 MyBtnComponent에서
<template>
<div class="btn">
<h1 @click="$emit('click')">click event</h1>
</div>
</template>
<script>
export default{
emits:[
'click'
]
}
</script>
저렇게 emits의 'click' 이벤트를 받아 놓으면,
그러니까.. 상위 컴포넌트의 클릭이벤트 log가 콜백함수로 전달 된 거다.
그 다음, h1에 클릭이벤트로 그 받은 emit의 클릭 이벤트를 실행하도록 한거다.
그러니까, 상위컴포넌트인 클릭이벤트 log()가
하위 컴포넌트 emit의 'click' 에 넘어간 것이다. (물론 기존 클릭 이벤트도 같이 발동 된다.)
참고로,
<template>
<div class="btn">
<slot></slot>
</div>
<h1 @click="$emit('click')">click event</h1>
</template>
<script>
export default{
}
그냥 이렇게 해도 똑같이 그렇게 됨.
꼭 스크립트에
emits 해서 명시해 놓을 필요는 없음.
그냥 $emit('click') 해도 클릭이벤트 구나 하고 알아들음.
단, 이것보다 더 놀라운 점은,
커스텀 이벤트.
예를 들어,
<template>
<MyBtnComponent class="asdf" @parentEvt="parentLog">zcxbxzcbxcz</MyBtnComponent>
</template>
<script>
import MyBtnComponent from './components/MyBtnComponent.vue';
export default{
components:{
MyBtnComponent
},
methods:{
parentLog(){
console.log("parentEvt");
}
}
}
</script>
저렇게 @커스텀이벤트이름=메소드 넘겨주고
<template>
<div class="btn">
<h1 @click="$emit('parentEvt')">click event1</h1>
<h2>no click event</h2>
</div>
</template>
<script>
export default {
}
</script>
이렇게 그냥 자식에서 $emit('부모로부터받은커스텀이벤트이름') 하면 된다.
'Vue.js' 카테고리의 다른 글
Refs 요소나 컴포넌트를 참조 (0) | 2023.10.19 |
---|---|
Provide, Inject 데이터를 자손 컴포넌트 까지 전달 (0) | 2023.10.18 |
최상위 요소(최상위 엘레멘트) (0) | 2023.10.13 |
slot (0) | 2023.10.13 |
:class (0) | 2023.10.13 |