양식을 제출할 때 단계를 하나 추가하려고 한다.
바로 유효성 검사.
→ 이를 위해 validateForm 메서드를 추가해보자.
로직을 두 메서드로 나누어서 메서드 하나가 너무 길어지지 않게 해보자.
그리고 submitForm의 시작부분에서 this.validateForm 메서드를 호출하여 모든 입력값을 검토해서 유효한지 아닌지 확인하자.
1/ 먼저, 새로운 데이터 프로퍼티를 추가하자.
formIsValid : true
처음에는 true이지만, 입력값이 하나라도 거짓이면 false가 된다.
다른 데이터는 더이상 특정 프로퍼티의 값이 아니라, 객체가 된다.
2/ validateForm함수로 유효한지 아닌지 확인하게 된다.
validateForm() {
this.formIsValid = true;
if(this.firstName.val === '') {
this.firstName.isValid = false;
this.formIsValid = false;
}
if(this.lastName.val === '') {
this.lastName.isValid = false;
this.formIsValid = false;
}
if(this.description.val === '') {
this.description.isValid = false;
this.formIsValid = false;
}
if(!this.rate.val || this.rate.val < 0) { //비어있는지 확인하는 대신, rate가 존재하는지의 여부. null이나 0등을 확인.
//또한, 만약 있더라도 this.rate.val이 0보다 작은지 확인. 시간당 수강료가 -인건 불가능하므로.
this.rate.isValid = false;
this.formIsValid = false;
}
if(this.areas.val.length === 0) { //전문분야가 입력되지 않았다는 뜻
this.areas.isValid = false;
this.formIsValid = false;
}
}
submitForm() {
this.validForm();
if (!this.formIsValid) {
return; //form이 유효하지않으면, 나머지 메서드가 실행되지 않게 한다.
}
const formData = {
first: this.firstName.val,
last: this.lastName.val,
desc: this.description.val,
rate: this.rate.val,
areas: this.areas.val,
};
console.log('formData', formData);
this.$emit('save-data', formData);
},
3/ 입력값이나 양식 전체가 무효인 경우, 유저에게 피드백을 표시하도록 해보자.
"Register"버튼 위에 p태그를 추가하여 메시지를 추가하자.
그리고 v-if로 formIsValid가 false인 경우만 표시되도록 하자.
<p v-if="!formIsValid">Please fix the above errors and submit again!</p>
4/ 추가로 무효인 입력값을 강조 표시해보자.
div에 class를 하나 동적으로 바인딩해보자. 객체엔 invalid 클래스를 추가하고, firstName.isValid가 false일 경우 p태그를 추가하여 메시지를 추가하자.
<div class="form-control" :class="{ invalid: !firstName.isValid }">
<label for="firstname">Firstname</label>
<input
type="text"
id="firstname"
v-model.trim="firstName.val"
@blur="clearValidity('firstName')"
/>
<p v-if="!firstName.isValid">Firstname must not be empty.</p>
</div>
<style scoped>
.invalid label {
color: red;
}
.invalid input,
.invalid textarea {
border: 1px solid red;
}
</style>
firstName, lastName, description 전부 추가해보자.
새로운 메서드 clearValidity()를 추가해보자.
괄호 안에 input을 인수로 넣고, 해당 input의 isValid를 참으로 설정한다.
methods: {
clearValidity(input) {
this[input].isValid = true;
},
}
그리고 input이 focus를 잃을때마다 clearValidity()를 호출한다.
→ @blur 이벤트 : 내장 이벤트로서 포커스를 잃을 때마다 자동으로 트리거되고 그럴때마다 clearValidity()를 호출한다.
<input
type="text"
id="lastname"
v-model.trim="lastName.val"
@blur="clearValidity('lastName')"
/>
이제 유효한 값을 입력하고 'Register'버튼을 클릭하면 제출 가능하고, 등록한 코치를 볼 수 있다.
** 출처: 모든 내용은 Udemy Vue-완벽가이드 강의를 기반으로 작성하였습니다.
'Vue.js' 카테고리의 다른 글
[Udemy Vue 완벽가이드 Section16] 249. Vuex로 요청(메시지) 저장하기 (0) | 2023.12.13 |
---|---|
[Udemy Vue 완벽가이드 Section16] 248. 연락처 양식 작업하기 (0) | 2023.12.13 |
[Udemy Vue 완벽가이드 Section16] 246. Vuex에 코치 추가하기 (0) | 2023.12.12 |
[Udemy Vue 완벽가이드 Section16] 245. 코치 등록하기:양식 (0) | 2023.12.12 |
[Udemy Vue 완벽가이드 Section16] 244. 코치 필터링하기 (0) | 2023.12.12 |