vee-validate使用教程

vee-validate使用教程

本文適合有一定Vue2.0基礎(chǔ)的同學(xué)參考,根據(jù)項目的實際情況來使用亲善,關(guān)于Vue的使用不做多余解釋设易。本人也是一邊學(xué)習(xí)一邊使用,如果錯誤之處敬請批評指出

一蛹头、安裝

npm install vee-validate@next --save

注意:@next,不然是Vue1.0版本

bower install vee-validate#2.0.0-beta.13 --save

二、引用

import Vue from 'vue';
import VeeValidate from 'vee-validate';
Vue.use(VeeValidate);

組件設(shè)置:

import VeeValidate, { Validator } from 'vee-validate';
import messages from 'assets/js/zh_CN';
Validator.updateDictionary({
    zh_CN: {
        messages
    }
});
const config = {
    errorBagName: 'errors', // change if property conflicts.
    delay: 0,
    locale: 'zh_CN',
    messages: null,
    strict: true
};
Vue.use(VeeValidate,config);

assets/js/zh_CN 代表你存放語言包的目錄戏溺,從node_modules/vee-validate/dist/locale目錄下面拷貝到你的項目
Validator還有更多應(yīng)用渣蜗,下面再講。
config其它參數(shù)旷祸,delay代表輸入多少ms之后進行校驗耕拷,messages代表自定義校驗信息,strict=true代表沒有設(shè)置規(guī)則的表單不進行校驗托享,errorBagName屬于高級應(yīng)用骚烧,自定義errors浸赫,待研究

三、基礎(chǔ)使用

<div class="column is-12">
    <label class="label" for="email">Email</label>
    <p class="control">
        <input name="email"
         type="text"
         placeholder="Email"
         v-validate
         data-rules="required|email"
         :class="{
           'input': true,
           'is-danger': errors.has('email')
         }">
        <span class="help is-danger" v-show="errors.has('email')" >{{ errors.first('email') }}</span>
    </p>
</div>

提醒:錯誤信息里面的名稱通常就是表單的name屬性赃绊,除非是通過Vue實例傳遞進來的既峡。
提醒:養(yǎng)成好習(xí)慣,給每個field添加name屬性碧查,如果沒有name屬性又沒有對值進行綁定的話运敢,validator可能不會對其進行正確的校驗

關(guān)于errors:

上面的代碼我們看到有errors.has,errors.first,errors是組件內(nèi)置的一個數(shù)據(jù)模型,用來存儲和處理錯誤信息忠售,可以調(diào)用以下方法:

errors.first('field') - 獲取關(guān)于當(dāng)前field的第一個錯誤信息
collect('field') - 獲取關(guān)于當(dāng)前field的所有錯誤信息(list)
has('field') - 當(dāng)前filed是否有錯誤(true/false)
all() - 當(dāng)前表單所有錯誤(list)
any() - 當(dāng)前表單是否有任何錯誤(true/false)
add(String field, String msg) - 添加錯誤
clear() - 清除錯誤
count() - 錯誤數(shù)量
remove(String field) - 清除指定filed的所有錯誤

關(guān)于Validator

Validator是以$validator被組件自動注入到Vue實例的传惠。同時也可以獨立的進行調(diào)用,用來手動檢查表單是否合法,以傳入一個對象的方式稻扬,遍歷其中指定的field卦方。

import { Validator } from 'vee-validate';
const validator = new Validator({
    email: 'required|email',
    name: 'required|alpha|min:3',
}); 
// or Validator.create({ ... });

你也可以在構(gòu)造了validator之后設(shè)置對象參數(shù)

import { Validator } from 'vee-validate';
const validator = new Validator();

validator.attach('email', 'required|email'); // attach field.
validator.attach('name', 'required|alpha', 'Full Name'); // attach field with display name for error generation.

validator.detach('email'); // you can also detach fields.

最后你也可以直接傳值給field,測試是否可以通過校驗泰佳,像這樣:

validator.validate('email', 'foo@bar.com'); // true
validator.validate('email', 'foo@bar'); // false
//或者同時校驗多個:
validator.validateAll({
    email: 'foo@bar.com',
    name: 'John Snow'
});
//只要有一個校驗失敗了盼砍,就返回false

四、內(nèi)置的校驗規(guī)則

after{target} - 比target要大的一個合法日期乐纸,格式(DD/MM/YYYY)
alpha - 只包含英文字符
alpha_dash - 可以包含英文衬廷、數(shù)字、下劃線汽绢、破折號
alpha_num - 可以包含英文和數(shù)字
before:{target} - 和after相反
between:{min},{max} - 在min和max之間的數(shù)字
confirmed:{target} - 必須和target一樣
date_between:{min,max} - 日期在min和max之間
date_format:{format} - 合法的format格式化日期
decimal:{decimals?} - 數(shù)字吗跋,而且是decimals進制
digits:{length} - 長度為length的數(shù)字
dimensions:{width},{height} - 符合寬高規(guī)定的圖片
email - 不解釋
ext:[extensions] - 后綴名
image - 圖片
in:[list] - 包含在數(shù)組list內(nèi)的值
ip - ipv4地址
max:{length} - 最大長度為length的字符
mimes:[list] - 文件類型
min - max相反
mot_in - in相反
numeric - 只允許數(shù)字
regex:{pattern} - 值必須符合正則pattern
required - 不解釋
size:{kb} - 文件大小不超過
url:{domain?} - (指定域名的)url

五、自定義校驗規(guī)則

1.直接定義

const validator = (value, args) => {
    // Return a Boolean or a Promise.
}
//最基本的形式宁昭,只返回布爾值或者Promise跌宛,帶默認的錯誤提示

2.對象形式

const validator = {
    getMessage(field, args) { // 添加到默認的英文錯誤消息里面
        // Returns a message.
    },
    validate(value, args) {
        // Returns a Boolean or a Promise.
    }
};

3.添加到指定語言的錯誤消息

const validator = {
    messages: {
        en: (field, args) => {
            // 英文錯誤提示
        },
        cn: (field, args) => {
            // 中文錯誤提示
        }
    },
    validate(value, args) {
        // Returns a Boolean or a Promise.
    }
};

創(chuàng)建了規(guī)則之后,用extend方法添加到Validator里面

import { Validator } from 'vee-validate';
const isMobile = {
    messages: {
        en:(field, args) => field + '必須是11位手機號碼',
    },
    validate: (value, args) => {
       return value.length == 11 && /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)
    }
}
Validator.extend('mobile', isMobile);

//或者直接

Validator.extend('mobile', {
    messages: {
      en:field => field + '必須是11位手機號碼',
    },
    validate: value => {
      return value.length == 11 && /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)
    }
});

然后接可以直接把mobile當(dāng)成內(nèi)置規(guī)則使用了:

<input v-validate data-rules="required|mobile" :class="{'input': true, 'is-danger': errors.has('mobile') }" name="mobile" type="text" placeholder="Mobile">
<span v-show="errors.has('mobile')" class="help is-danger">{{ errors.first('mobile') }}</span>

4.自定義內(nèi)置規(guī)則的錯誤信息

import { Validator } from 'vee-validate';

const dictionary = {
    en: {
        messages: {
            alpha: () => 'Some English Message'
        }
    },
    cn: {
        messages: {
            alpha: () => '對alpha規(guī)則的錯誤定義中文描述'
        }
    }
};

Validator.updateDictionary(dictionary);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末积仗,一起剝皮案震驚了整個濱河市疆拘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寂曹,老刑警劉巖哎迄,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隆圆,居然都是意外死亡漱挚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門渺氧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旨涝,“玉大人,你說我怎么就攤上這事侣背“谆” “怎么了慨默?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弧腥。 經(jīng)常有香客問我厦取,道長,這世上最難降的妖魔是什么鸟赫? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任蒜胖,我火速辦了婚禮,結(jié)果婚禮上抛蚤,老公的妹妹穿的比我還像新娘台谢。我一直安慰自己,他們只是感情好岁经,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布朋沮。 她就那樣靜靜地躺著,像睡著了一般缀壤。 火紅的嫁衣襯著肌膚如雪樊拓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天塘慕,我揣著相機與錄音筋夏,去河邊找鬼。 笑死图呢,一個胖子當(dāng)著我的面吹牛条篷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛤织,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼赴叹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了指蚜?” 一聲冷哼從身側(cè)響起乞巧,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摊鸡,沒想到半個月后绽媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡免猾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年些椒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掸刊。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赢乓,靈堂內(nèi)的尸體忽然破棺而出忧侧,到底是詐尸還是另有隱情石窑,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布蚓炬,位于F島的核電站松逊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肯夏。R本人自食惡果不足惜经宏,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驯击。 院中可真熱鬧烁兰,春花似錦、人聲如沸徊都。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暇矫。三九已至主之,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間李根,已是汗流浹背槽奕。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留房轿,地道東北人粤攒。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像冀续,于是被迫代替她去往敵國和親琼讽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容