Nuxt.js

Nuxt에 vee-validation을 적용해보자.

Hoon1994 2020. 11. 20. 16:10

 

 

✏️Nuxt에 vee-validation을 적용해보자.

 

Nuxt 프로젝트에 로그인 기능을 추가할 일이 생겼고, 로그인하면 또 검증 로직을 실행해줘야 하기 때문에 

vee-validation을 이용하여 검증을 하려고 한다! 

 

현재 프로젝트에서는 vee-validation 2버전대로 사용 중이라서, 현재 3버전대와는 조금 차이가 있어서 

새로 조사를 하게 됐다. 가이드 글이 잘 되어 있긴 하지만 영어라서.. 한글로 정리된 글은 별로 없어서 아쉬웠다. 

Next말고 Nuxt라서 인기가 없나...

 

우선 vee-validation을 설치해보자. 

 

npm install vee-validate --save

 

설치 후 플러그인으로 사용하기 위해 plugins 폴더에 validation.js 파일을 생성하자.

 

// plugins/validation.js

import Vue from 'vue';
import { ValidationProvider, ValidationObserver, extend } from 'vee-validate';
import * as rules from 'vee-validate/dist/rules';

Vue.component('ValidationProvider', ValidationProvider);
Vue.component('ValidationObserver', ValidationObserver);

Object.keys(rules).forEach((rule) => {
  extend(rule, rules[rule]);
});

 

import 구문을 통해 Vue, ValidationProvider, ValidationObserver, extend 등을 가져오고, 

vee-validate/dist/rules에서 rules를 통으로 가져온다! 

 

여기서 주의할 점이 있다. 

 

아래 내용은 vee-validate 문서에 기재되어 있는 내용이다.

By default Nuxt ignores transpilation of the node_modules folder,
and since the rules.js is an ES6 export. 
You should add vee-validate/dist/rules to the list of sources that will be transpiled.
Otherwise you might run into "Unexpected Token: export" errors.

 

기본적으로 Nuxt.js는 node_modules 폴더의 트랜스파일을 무시하기 때문에 트랜스 파일 목록에 추가해줘야 한다. 

 

nuxt.config.js 파일에 아래처럼 코드를 추가해야 한다.

// nuxt.config.js

  build: {
    transpile: ['vee-validate/dist/rules'],
  },

 

추가해줬다면 다시 validation.js 코드를 보자. 

 

Vue.component('ValidationProvider', ValidationProvider);
Vue.component('ValidationObserver', ValidationObserver);

Object.keys(rules).forEach((rule) => {
  extend(rule, rules[rule]);
});

 

ValidationProvider, ValidationObserver를 컴포넌트에서 사용할 수 있도록 추가해주자.

 

어떤 기능을 하는건지 짚고 넘어가자면, 

 

ValidationProvider: 검증할 요소 (input 등)을 감싸 검증을 도와준다.

ValidationObserver: 양식 전체의 요소를 검증할 수 있도록 도와준다. (하위 요소로 ValidationProvider를 여러개 둘 수 있음)

 

Object(keys) 구문은 가져온 모든 rules를 foreach로 하나씩 extend하여 규칙을 사용할 수 있게 해준다. 

 

 

그리고 사용해보면..! 

 

<ValidationProvider v-slot="{ errors }" rules="required">
	<input v-model="test" type="text" />
	<span>{{ errors[0] }}</span>
</ValidationProvider>

 

정상적으로 작동이 된다. :)

'Nuxt.js' 카테고리의 다른 글

Nuxt 빌드/배포 분기를 여러곳으로 나눠보자.  (4) 2020.11.26
Nuxt를 사용해보자 3탄.  (0) 2020.11.02
Nuxt.js를 사용해보자. 2탄  (0) 2020.10.30
Nuxt.js를 사용해보자. 1탄  (0) 2020.10.30