반응형
Vuejs 자 컴포넌트 입력과 함께 폼 제출
입력 필드를 포함하는 자식 구성 요소가 여러 개인 양식 구성 요소인 상위 구성 요소가 있습니다.
<template>
<div class="form">
<generalData v-model="input" />
<textAreas v-model="input"/>
<button class="btn" @click="Submit()">Submit</button>
<div/>
</template>
<script>
export default {
data(){
return {
input: {
name: '',
age: '',
address: ''
bio: ''
}
}
},
methods: {
Submit(){
console.log('Submitting...');
console.log(this.input);
}
}
}
</script>
자 컴포넌트에는 텍스트필드가 포함되어 있습니다.
<template>
<div class="generalData">
<input name="name" type="text" v-bind:value="input.name" v-on:input="updateInput($event.target.value)">
<input name="age" type="text" v-bind:value="input.age" v-on:input="updateInput($event.target.value)">
<div/>
</template>
<script>
export default {
props: ['input'],
data(){
return {
}
},
methods: {
updateInput(value){
this.$emit('input', value);
}
}
}
</script>
다른 아이 컴포넌트에 대해서도 동일하지만 값이 갱신되지 않아 전송할 수 없습니다.
다음 코드를 사용해 보십시오.
<template>
<div class="generalData">
<input type="text" v-model="person.name" @change="handleChange" @input="handleInput">
<input type="text" v-model="person.age" @change="handleChange" @input="handleInput">
<input type="text" v-model="person.address" @change="handleChange" @input="handleInput">
<input type="text" v-model="person.bio" @change="handleChange" @input="handleInput">
<div/>
</template>
<script>
export default {
props: ['value'],
data () {
return {
person: {
name: '',
age: '',
address: ''
bio: ''
}
}
},
methods: {
handleChange () {
return this.$emit('change', this.person)
},
handleInput () {
return this.$emit('input', this.person)
},
setCurrentValue (person) {
this.person = person
}
},
watch: {
value (val) {
if (!val) return
this.setCurrentValue(val)
}
}
}
</script>
컴포넌트 내부에서 정의한 소품을 사용해야 합니다.소품 입력에 이름을 붙였습니다.
<template>
<div class="form">
<generalData :input="input" />
<textAreas :input="input" />
<button class="btn" @click="submit">Submit</button>
<div/>
</template>
<script>
export default {
data(){
return {
input: {
name: '',
age: '',
address: ''
bio: ''
}
}
},
methods: {
submit(){
console.log('Submitting...');
console.log(this.input);
}
}
}
</script>
다른 방법은 입력 컴포넌트를 1개 만들고 사용자 오브젝트에 Atribute를 전달하여 이 컴포넌트를 반복하는 것입니다.v-model
값에 바인드된 입력에 직접 액세스합니다.사용자 개체가 루트 뷰 인스턴스에 있는 경우this.$root.whatEver
이 바이올린을 확인해 주세요.https://jsfiddle.net/caseyjoneal/urgantzo/113/
언급URL : https://stackoverflow.com/questions/54495933/vuejs-submit-form-with-inputs-in-child-components
반응형
'itsource' 카테고리의 다른 글
vuejs에서 제목 태그를 동적으로 바인딩 (0) | 2022.08.16 |
---|---|
Vuex에 있는 다른 상점의 getter를 어떻게 부르죠? (0) | 2022.08.16 |
Vuex 구성 요소에 모듈 상태 액세스 저장 (0) | 2022.08.16 |
C에서 포인터를 캐스팅하는 규칙은 무엇입니까? (0) | 2022.08.16 |
C++를 배우기 전에 C를 배워야 하나요? (0) | 2022.08.16 |