Tailwind CSS 및 VeeValidate를 사용하여 Vue에서 양식 작성(2부)
25912 단어 tailwindcssvuewebdev
내 저장소Github에서 예제 앱을 복제할 수 있습니다.
1부 링크
2부: 양식 만들기 및 유효성 검사 추가
이 파트에서는 양식을 만들고 프런트엔드 양식 유효성 검사를 위해 Veevalidate를 연결하는 방법을 살펴보겠습니다.
양식 만들기
Login.vue
폴더에 새 vue 구성 요소src/views
를 만듭니다. 아래 명령을 사용할 수 있습니다
touch src/views/Login.vue
아래 코드를 파일에 붙여넣습니다.
<template>
<div class="flex justify-center items-center mt-52">
<div class="w-full max-w-xs">
<form class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4">
<div class="identity-input mb-4">
<label
for="identity"
class="block text-gray-700 text-sm font-bold mb-2"
>
Email</label
>
<input
id="identity"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
type="text"
placeholder="Email"
aria-describedby="emailHelp"
v-model="email"
/>
<span class="text-xs text-red-700" id="emailHelp"></span>
</div>
<div class="password-input mb-6">
<label
for="identity"
class="block text-gray-700 text-sm font-bold mb-2"
>Password</label
>
<input
aria-describedby="passwordHelp"
v-model="password"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
id="password"
type="password"
placeholder="*******"
/>
<span class="text-xs text-red-700" id="passwordHelp"></span>
</div>
<div class="flex items-center justify-between">
<button
class="bg-blue-600 hover:bg-black text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline"
type="submit"
>
Sign In
</button>
<a
class="inline-block align-baseline font-bold text-sm text-blue-500 hover:text-blue-800"
href="#"
>
Forgot Password?
</a>
</div>
</form>
</div>
</div>
</template>
<script>
export default {
name: "Login",
data() {
return {
email: "",
password: "",
};
},
methods: {
login() {
console.log("logging in");
},
},
};
</script>
로그인 경로 설정
routes/index.js
파일에 아래를 추가하십시오.
...
import Login from '../views/Login.vue'
...
const routes = [
...,
{
path: '/login',
name: 'Login',
component: Login
},
]
...
App.vue 파일에 추가
...
<router-link
to="/link"
class="block ml-4 mt-4
lg:inline-block lg:mt-0 text-blue-200
hover:text-white"
>Login</router-link>
...
이 위치에서 http://localhost:8080/#/login
로 이동하면 다음과 같이 표시됩니다.
VeeValidate 설정
유효성 검사를 추가하려면 VeeValidate를 설치해야 합니다.
npm install vee-validate --save
설치가 완료되면 main.js
추가
...
import {extend,ValidationObserver, ValidationProvider} from 'vee-validate';
import * as rules from 'vee-validate/dist/rules';
Vue.component('ValidationObserver', ValidationObserver);
Vue.component('ValidationProvider', ValidationProvider);
Object.keys(rules).forEach(rule => {
extend(rule, rules[rule]);
});
...
extend
vee-validate 함수 및 구성 요소에서 전역적으로 사용할 규칙을 더 추가할 수 있습니다.
ValidationObserver
는 양식을 래핑하고 그 아래에 중첩된 모든 필드에 대해 집계된 유효성 검사 상태를 제공하는 구성 요소입니다.
ValidationProvider
구성 요소는 입력을 래핑하고 유효성 검사 상태를 제공하는 구성 요소입니다.
그런 다음 import * as rules from 'vee-validate/dist/rules';
를 사용하여 모든 기본 규칙을 가져오고 Object.keys(rules).forEach
함수를 사용하여 이를 반복합니다.
이를 통해 우리는 마법을 실현할 수 있습니다.
양식에 유효성 검사를 추가합니다.
이제 양식 구성 요소를 ValidationObserver 구성 요소로 래핑해야 합니다.
...
<ValidationObserver ref="loginForm">
<form >
...
</form>
</ValidationObserver>
...
유효성 검사 공급자는 이제 입력을 처리합니다. v-slot="v"
속성을 허용합니다. 덜 장황하게 만들기 위해 ES6의 객체 파괴를 사용하고 v-slot="{ errors }"
로 바꿀 수 있습니다.
또한 오류 메시지를 표시하는 데 사용되는 이름 속성과 유효성 검사 규칙도 허용합니다.
Read more about registering the Validation Provider heere
이를 통해 이제 오류를 활용하고 html에도 표시할 수 있습니다.
<ValidationProvider name="Email" rules="required|email" v-slot="{ errors }">
<div class="email-input mb-4">
<label
for="email"
class="block text-gray-700 text-sm font-bold mb-2"
>
Email</label
>
<input
id="email"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
type="text"
placeholder="Email"
aria-describedby="emailHelp"
v-model="email"
/>
<span class="text-xs text-red-700" id="emailHelp">{{
errors[0]
}}</span>
</div>
</ValidationProvider>
<ValidationProvider
name="Password"
rules="required|min:6"
v-slot="{ errors }"
>
<div class="password-input mb-6">
<label
for="password"
class="block text-gray-700 text-sm font-bold mb-2"
>Password</label
>
<input
aria-describedby="passwordHelp"
v-model="password"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
id="password"
type="password"
placeholder="*******"
/>
<span class="text-xs text-red-700" id="emailHelp">{{
errors[0]
}}</span>
<span class="text-xs text-red-700" id="passwordHelp"></span>
</div>
</ValidationProvider>
마지막으로 유효성 검사가 성공적으로 통과되었는지 확인하기 위해 제출 버튼을 누를 때 유효성 검사 관찰자가 트리거되는지 확인해야 합니다.
Validation Observer에 v-slot="{ handleSubmit }"
를 추가하고 양식에 @submit.prevent
이벤트 리스너도 추가해야 합니다.
...
<ValidationObserver v-slot="{ handleSubmit }" ref="loginForm">
<form @submit.prevent="handleSubmit(login)" class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4">
...
그게 요약입니다. 값을 입력하지 않고 제출 버튼을 클릭하거나 이메일/비밀번호에 유효하지 않은 값을 입력하면 페이지가 다음과 같아야 합니다.
Reference
이 문제에 관하여(Tailwind CSS 및 VeeValidate를 사용하여 Vue에서 양식 작성(2부)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/maxwelladapoe/building-a-form-in-vue-using-tailwind-css-and-veevalidate-part-2-19fi
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
touch src/views/Login.vue
<template>
<div class="flex justify-center items-center mt-52">
<div class="w-full max-w-xs">
<form class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4">
<div class="identity-input mb-4">
<label
for="identity"
class="block text-gray-700 text-sm font-bold mb-2"
>
Email</label
>
<input
id="identity"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
type="text"
placeholder="Email"
aria-describedby="emailHelp"
v-model="email"
/>
<span class="text-xs text-red-700" id="emailHelp"></span>
</div>
<div class="password-input mb-6">
<label
for="identity"
class="block text-gray-700 text-sm font-bold mb-2"
>Password</label
>
<input
aria-describedby="passwordHelp"
v-model="password"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
id="password"
type="password"
placeholder="*******"
/>
<span class="text-xs text-red-700" id="passwordHelp"></span>
</div>
<div class="flex items-center justify-between">
<button
class="bg-blue-600 hover:bg-black text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline"
type="submit"
>
Sign In
</button>
<a
class="inline-block align-baseline font-bold text-sm text-blue-500 hover:text-blue-800"
href="#"
>
Forgot Password?
</a>
</div>
</form>
</div>
</div>
</template>
<script>
export default {
name: "Login",
data() {
return {
email: "",
password: "",
};
},
methods: {
login() {
console.log("logging in");
},
},
};
</script>
...
import Login from '../views/Login.vue'
...
const routes = [
...,
{
path: '/login',
name: 'Login',
component: Login
},
]
...
...
<router-link
to="/link"
class="block ml-4 mt-4
lg:inline-block lg:mt-0 text-blue-200
hover:text-white"
>Login</router-link>
...
npm install vee-validate --save
...
import {extend,ValidationObserver, ValidationProvider} from 'vee-validate';
import * as rules from 'vee-validate/dist/rules';
Vue.component('ValidationObserver', ValidationObserver);
Vue.component('ValidationProvider', ValidationProvider);
Object.keys(rules).forEach(rule => {
extend(rule, rules[rule]);
});
...
...
<ValidationObserver ref="loginForm">
<form >
...
</form>
</ValidationObserver>
...
<ValidationProvider name="Email" rules="required|email" v-slot="{ errors }">
<div class="email-input mb-4">
<label
for="email"
class="block text-gray-700 text-sm font-bold mb-2"
>
Email</label
>
<input
id="email"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
type="text"
placeholder="Email"
aria-describedby="emailHelp"
v-model="email"
/>
<span class="text-xs text-red-700" id="emailHelp">{{
errors[0]
}}</span>
</div>
</ValidationProvider>
<ValidationProvider
name="Password"
rules="required|min:6"
v-slot="{ errors }"
>
<div class="password-input mb-6">
<label
for="password"
class="block text-gray-700 text-sm font-bold mb-2"
>Password</label
>
<input
aria-describedby="passwordHelp"
v-model="password"
class="shadow appearance-none borderrounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
id="password"
type="password"
placeholder="*******"
/>
<span class="text-xs text-red-700" id="emailHelp">{{
errors[0]
}}</span>
<span class="text-xs text-red-700" id="passwordHelp"></span>
</div>
</ValidationProvider>
...
<ValidationObserver v-slot="{ handleSubmit }" ref="loginForm">
<form @submit.prevent="handleSubmit(login)" class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4">
...
Reference
이 문제에 관하여(Tailwind CSS 및 VeeValidate를 사용하여 Vue에서 양식 작성(2부)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maxwelladapoe/building-a-form-in-vue-using-tailwind-css-and-veevalidate-part-2-19fi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)