Vue.js에서 폼 (Forms)을 사용하면 사용자 입력을 쉽게 관리하고 바인딩할 수 있습니다. Vue는 양방향 데이터 바인딩을 지원하여, 폼 요소와 Vue 인스턴스의 데이터 간의 동기화를 자동으로 처리합니다. 이 기능은 사용자 입력을 실시간으로 반영하고, 입력된 데이터를 쉽게 수집할 수 있게 해줍니다.
텍스트 입력 (Text Input):
v-model 디렉티브를 사용하여 데이터와 바인딩할 수 있습니다.<template>
<div>
<input type="text" v-model="textInput" placeholder="Type something..." />
<p>You typed: {{ textInput }}</p>
</div>
</template>
<script>
export default {
data() {
return {
textInput: ''
}
}
}
</script>
체크박스 (Checkbox):
v-model을 사용하여 체크 상태를 데이터와 바인딩할 수 있습니다.<template>
<div>
<input type="checkbox" v-model="isChecked" />
<label>Check me</label>
<p>{{ isChecked ? 'Checked' : 'Not Checked' }}</p>
</div>
</template>
<script>
export default {
data() {
return {
isChecked: false
}
}
}
</script>
라디오 버튼 (Radio Button):
v-model을 바인딩하여 선택된 값을 저장할 수 있습니다.<template>
<div>
<input type="radio" id="option1" value="Option 1" v-model="selectedOption" />
<label for="option1">Option 1</label><br>
<input type="radio" id="option2" value="Option 2" v-model="selectedOption" />
<label for="option2">Option 2</label><br>
<p>Selected: {{ selectedOption }}</p>
</div>
</template>
<script>
export default {
data() {
return {
selectedOption: ''
}
}
}
</script>
셀렉트 박스 (Select Box):
v-model을 사용하여 선택된 값을 바인딩합니다.<template>
<div>
<select v-model="selected">
<option disabled value="">Please select one</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<p>Selected: {{ selected }}</p>
</div>
</template>
<script>
export default {
data() {
return {
selected: ''
}
}
}
</script>
폼 제출 시 @submit 이벤트를 사용하여 제출을 처리할 수 있습니다. 기본 동작을 방지하고 데이터를 처리하는 방법은 다음과 같습니다.
<template>
<form @submit.prevent="handleSubmit">
<input type="text" v-model="name" placeholder="Enter your name" required />
<button type="submit">Submit</button>
</form>
</template>
<script>
export default {
data() {
return {
name: ''
}
},
methods: {
handleSubmit() {
alert(`Submitted Name: ${this.name}`);
this.name = ''; // 입력 필드 초기화
}
}
}
</script>
Vue에서는 입력값의 유효성을 검사할 수 있습니다. 유효성 검사 로직을 구현하여 조건에 맞지 않을 경우 경고 메시지를 표시하거나 제출을 막을 수 있습니다.
<template>
<form @submit.prevent="handleSubmit">
<input type="text" v-model="email" placeholder="Enter your email" required />
<span v-if="!isEmailValid">Invalid email format</span>
<button type="submit" :disabled="!isEmailValid">Submit</button>
</form>
</template>
<script>
export default {
data() {
return {
email: ''
}
},
computed: {
isEmailValid() {
const emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;
return emailPattern.test(this.email);
}
},
methods: {
handleSubmit() {
alert(`Submitted Email: ${this.email}`);
this.email = ''; // 입력 필드 초기화
}
}
}
</script>
v-model 디렉티브를 사용하여 양방향 데이터 바인딩을 지원합니다.