前言
我用的是vee-validate
版本為3.3.7
2.1.5
移步 : VeeValidate 的使用場景以及配置
安裝教程
cnpm install vee-validate --save
新建檔案vee-validate.js
import { extend, ValidationObserver, ValidationProvider, localize } from 'vee-validate'
import { required, email, min, between, numeric } from 'vee-validate/dist/rules'
import zh_CN from 'vee-validate/dist/locale/zh_CN.json';
localize('zh_cn',zh_CN) // 配置中文
export default {
install (Vue) {
Vue.component('ValidationObserver', ValidationObserver)
Vue.component('ValidationProvider', ValidationProvider)
extend('required', required)
extend('email', email)
extend('min', min)
extend('between', between)
extend('numeric', numeric)
extend('phone', {
message: '請輸入11位的手機號碼',
validate: value => value.length === 11 && /^1[3456789]\d{9}$/.test(value)
})
}
}
main.js 引入 vee-validate.js
import Validate from './vee-validate'
Vue.use(Validate)
已經安裝完成了
使用教程
新建表單
<template>
<ValidationObserver ref="form">
<form @submit.prevent="handleAddAddress">
<!-- 要驗證的輸入框 -->
<ValidationProvider rules="required|phone" v-slot="{ errors }" name="手機號碼">
<input type="text" v-model="phone" />
{{ errors[0] }} <!-- 錯誤資訊顯示 -->
</ValidationProvider>
<button type="submit">確認</button>
</form>
</ValidationObserver>
</template>
顯示
method處理
methods:{
async checkValid () { // 是否驗證通過
return this.$refs.form.validate();
},
async handleAddAddress(e){
let check = await this.checkValid();
if(! check) // 驗證不通過
setTimeout(()=>{
let errors = Object.values(this.$refs.form.errors);
let first_error_index = errors.findIndex(val => val.length >= 1);
alert(errors[first_error_index][0])
},200); // 設定error可能需要時間 所以加延遲
// 彈出請輸入11位的手機號碼
......
}
this.$refs.form.validate()是一個promise,
當然你也可以用then
吐槽
2
簡單多了,我只是想做個簡單的驗證而已。
3
是受到lar
啟發,個人感覺真蛋疼,超麻煩的。
每個input
都要被ValidationProvider
包裹才能驗證。
(應該把input
封裝成自定義元件)
本作品採用《CC 協議》,轉載必須註明作者和本文連結