[TODO]
- page/test.vue
test 페이지 안에서 form 데이터들(name, phone, email 등등) 을 변수로 관리하고,
그 데이터들을 모아서 백엔드로 전달
input 태그 가 특정 컴포넌트로 쌓여서 template에 바로 쓰이지 않고, 하위 컴포넌트 안에 들어가야함
[SOLUTION#1]
- emit으로 하위 컴포넌트 데이터(e.target.value) 를 상위 컴포넌트(page/test.vue) 로 전달
# 상위 컴포넌트 (pages/test.vue)
<template>
<SearchInput
:search-keyword="searchKeyword"
@input="updateSearchKeyword"
></SearchInput>
</template>
<script>
methods: {
updateSearchKeyword(keyword) {
this.searchKeyword = keyword
}
}
</script>
# 하위 컴포넌트 (components/SearchInput.vue)
<template>
<div>
<input
type="text"
:value="searchKeyword"
@input="$emit('input', $event.target.value)"
/>
<button type="button" @click="$emit('search')">search</button>
</div>
</template>
<script>
export default {
props: {
searchKeyword: {
type: String,
default: () => '',
},
},
}
</script>
[SOLUTION#2]
- v-model 사용
# 상위 컴포넌트 (pages/test.vue)
<template>
<SearchInput
v-model="searchKeyword"
:search-keyword="searchKeyword"
></SearchInput>
</template>
<script>
</script>
# 하위 컴포넌트 (components/SearchInput.vue)
<template>
<div>
<input
type="text"
:value="value"
@input="$emit('input', $event.target.value)"
/>
<button type="button" @click="$emit('search')">search</button>
</div>
</template>
<script>
export default {
props: {
value: {
type: String,
default: () => '',
},
},
}
</script>
'programming > Vue' 카테고리의 다른 글
[Nuxt] Vue 페이지나 컴포넌트에서 분리된 공통 함수 사용하기 (2) | 2022.09.29 |
---|---|
[Vue] textarea 조건부 랜더링시 focus 이동 안되는 케이스 해결 -> $ref.focus() & nextTick() 메소드 (0) | 2022.07.19 |
[Vue.js] #11 네비게이션 바(NavBar) 만들기 (0) | 2022.03.04 |
[Vue.js] #10 vue-router 데이터 전달하기 (params, props) (0) | 2022.03.04 |
[Vue.js] #9 vue-router 사용하여 메뉴 navigation 링크만들기 (0) | 2022.03.04 |