본문 바로가기
개발 관련 지식/Vue.JS

vee-validate

by 권태일1147 2020. 3. 10.

input box에 validation을 적용하기 위해 외부 라이브러리 vee-validate를 사용했다.

여기에서 사용하는 버전은 2.2.15 버전이다

// package.json

"dependencies": {
    "vee-validate": "^2.2.15",
    "vue": "^2.6.11",
},

 

먼저 vee-validate를 설치한다.

npm install vee-validate --save

 

 

그 다음, 컴포넌트에 vee-validate를 불러온다.(나는 최상위 컴포넌트에 불러왔다.)

<script>
    import Vue from 'vue'
    import VeeValidate from 'vee-validate'
    Vue.use(VeeValidate)
</script>

 

그 후에 html에

<template>
    <div>
        <input 
    	    type="text"
            v-model="title"
            v-validate="'required'"
            name="title"/>
        <span>{{ errors.first('title') }}</span> <!-- inputbox의 name을 맵핑한다. -->
        <button @click="save">저장</button>
    </div>
</template>

validate 검사 후 저장 되도록 하기 위해 save 함수를 만든다.

<script>
    import Vue from 'vue'
    import VeeValidate from 'vee-validate'
    
    Vue.use(VeeValidate)
    
    export default {
    	data() {
            return {
                title: ''
            };
        },
        methods:{
            save(){
            	this.$validator.validateAll().then(success => {
                    if(success){
                    	....
                    }
                })
            }
        }
        ...
    }
</script>

만약 validate 규칙에 어긋나서 validateAll()의 결과가 success로 오지 않는다면, errors 객체가 만들어진다.

<span>{{ errors.first('title') }}</span>

이 활성화 될 것이다.

 

 

css까지 적용해서 이런식으로 만들어봤다.

<template>
    <div>
        <input 
            type="checkbox"
            v-model="tnf"
        />
        <input
            type="text"
            name="title"
            v-model="title"
            :disabled="!tnf"
            v-validate="rules"
            v-bind:class="{'has-error': errors.has('title')}"
        />
        <button @click="save">저장</button>
    </div>
</template>

<script>
    import Vue from 'vue'
    import VeeValidate from 'vee-validate'
    
    Vue.use(VeeValidate)
    
    export default {
        data() {
            return {
                title: '',
                tnf: false,
            };
        },
        methods: {
            save(){
            	this.$validator.validateAll().then(success => {
                    if(success){
                    	....
                    }
                })
            }
        },
        computed: {
            rules(){
                return this.tnf ? 'required' : ''
            }
        },
    }
</script>

<style scoped>
    .has-error {
        border: 1px solid red;
    }
</style>

validate를 무조건 요구하는게 아니고 checkbox가 활성화 되었을 때만 validate를 하기 위해 computed로 rules 함수를 받아와서 적용하는 방식이다.

 

그리고 validate 실패로 인해 errors.has('title')이 돌아오면(입력하지 않으면) 'has-error' 라는 class를 적용해서 css로 테두리를 빨간색으로 변경.

 

입력하면 변화 없음.

'개발 관련 지식 > Vue.JS' 카테고리의 다른 글

vue create 프로젝트 read-only  (0) 2020.05.29
Vue - computed, watch  (0) 2020.03.17
Vuex : vue 상태 관리 패턴  (0) 2020.03.15
virtual scroll  (0) 2020.03.05
vue.js project 만들기  (0) 2020.03.05