티스토리 뷰
대체 vue에서는 부모 컴포넌트의 함수를 어떻게 실행하는가...!!!!!
수많은 시행착오 끝에 알게 됐다.... 챗지피티가 data() 버전으로만 알려주거나 헛소리를 해서 한참 걸렸다.... 믿을게 못 되는 녀석.....
먼저 부모컴포넌트에서 전달할 함수를 @나 v-on:키워드를 사용해서 전달해 준다. 이유는 모르겠지만 ref를 사용해야 이벤트가 발생했을 때 값이 바뀌는 것 같아서 ref도 추가해 줬다. ref는 다음에 찾아볼 예정이다.
// 부모 컴포넌트
...
export default defineComponent({
setup() {
const isShowModal = ref(false);
const showModal = () => {
isShowModal.value = !isShowModal.value;
};
return { isShowModal, showModal };
},
components: {
Main,
WriteModal,
},
});
</script>
<template>
<Main @show-modal="showModal" />
<div v-if="isShowModal">
<WriteModal v-on:show-modal="showModal" />
</div>
</template>
자식 컴포넌트에서 emits을 선언하고 넘겨준 이벤트 이름을 []에 넣는다.
setup()의 두번째 인자로는 setupContext를 받는데 여기서 emit 함수에 접근할 수 있다. 쓰기 편하도록 구조분해 할당을 해준다.
클릭하면 부모 컴포넌트 함수를 실행할 것이므로 클릭하면 실행할 함수를 선언하고 그 내부에 emit(호출할 이벤트)를 넣어서 부모 컴포넌트 함수가 실행되도록 한다. emit()의 2번째 인자로 값을 넣어서 값을 변경할 수도 있다고 한다.
// 자식 컴포넌트 1
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
name: 'WriteModal',
emits: ['show-modal'],
setup(_, { emit }) {
const clickHideModalBtn = () => {
emit('show-modal');
};
return { clickHideModalBtn };
},
});
</script>
<template>
<div class="background">
<div class="write-modal">
<button class="close-btn" @click="clickHideModalBtn">
<span
class="pi pi-times icon"
style="font-size: 1.2rem; color: #000"
></span>
</button>
</div>
</div>
</template>
// 자식 컴포넌트 2
...
export default defineComponent({
name: 'Main',
components: {
WriteBtn,
},
emits: ['show-modal'],
setup(_, { emit }) {
const clickShowModalBtn = () => {
emit('show-modal');
};
return { clickShowModalBtn };
},
});
</script>
<template>
<div class="container">
<WriteBtn @click="clickShowModalBtn" />
</div>
</template>
728x90
'TIL' 카테고리의 다른 글
TIL 230803 [Vue] <template> == Fragment tag (0) | 2023.08.03 |
---|---|
TIL 230801 [Vue] v-for, ref, v-model, vue 문법 (0) | 2023.08.01 |
TIL 230727 [Vue] 자식 컴포넌트에게 props 전달하기 (0) | 2023.07.27 |
TIL 230720 로컬 스토리지를 자주 쓰고 지우면 하드디스크가 늙는다... (0) | 2023.07.20 |
TIL 230718 [Vue] 부모 컴포넌트에서 자식 컴포넌트 사용하기 (0) | 2023.07.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코드잇
- Python
- 구름에듀
- 비주얼스튜디오코드
- 제로초
- 드림코딩
- vscode
- 김버그
- 스파르타코딩클럽
- 자바스크립트
- 타입스크립트
- CSS
- 리액트
- javascript
- vue
- scss
- Typescript
- html
- map
- 회고
- js
- 깃
- TS
- git
- React
- Til
- 파이썬
- 저스트코드
- 제이쿼리
- 코딩앙마
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함