728x90
반응형
Vue로 된 프로젝트가 있는데 하나의 파일에서 화면을 전부 만들고 있었다.
각 부분들을 컴포넌트로 만드는데 자식 컴포넌트에 값을 넘겨 주면서
watch
로 변경을 감지할 수 있도록 하는 기능이 필요했다.
v-model
을 사용하면 쉽게 될 줄 알았는데 미처 생각하지 못한 부분이 있었다.
자식 컴포넌트에서 값을 받은 것이 변경됐는지 이벤트를 보내는 부분을 잊고 있었다.
공식 문서를 읽어보면서 어떻게 해야하는지를 알 수 있었다.
다음은 문서에 나온 코드를 지금 사용하고 있는 방식으로 변경한 것이다.
Parent.vue
<template>
<Child v-model="check" />
</template>
<script>
import Child from './Child.vue';
export default {
name: 'Parent',
data: () => {
return {
check: true
}
},
watch: {
check: val => console.log(val)
}
}
</script>
Child.vue
<template>
<input
type="checkbox"
:checked="checked"
@change="$emit('change', $event.target.checked)"
>
</template>
<script>
export default {
name: 'Child',
model: {
prop: 'checked',
event: 'change'
},
props: ['checked']
};
</script>
참고 문헌
반응형