成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

vuelidate 對(duì)于vueJs2.0的驗(yàn)證解決方案

zhangwang / 857人閱讀

摘要:介紹在后端項(xiàng)目里比如我們的框架對(duì)于表單驗(yàn)證有自己的一套機(jī)制他將驗(yàn)證集成在我們只需要在我們的方法中依賴注入我們自己實(shí)例化后的驗(yàn)證類當(dāng)然也可以直接去在方法里去驗(yàn)證表單數(shù)據(jù)而在我們的前端的項(xiàng)目里也就是在我們的項(xiàng)目里也有比較好的驗(yàn)證解決方案也就是這

介紹

在后端項(xiàng)目里 比如我們的Laravel框架 對(duì)于表單驗(yàn)證有自己的一套validation機(jī)制 他將驗(yàn)證集成在FormRequest

我們只需要在我們的方法中依賴注入我們自己實(shí)例化后的驗(yàn)證類 當(dāng)然也可以直接去在方法里去驗(yàn)證表單數(shù)據(jù)

而在我們的前端的項(xiàng)目里 也就是在我們的vue項(xiàng)目里 也有比較好的驗(yàn)證解決方案 也就是這的vuelidate

1.安裝

和我們安裝前端包一樣 在項(xiàng)目終端執(zhí)行:

$ npm install vuelidate --save

安裝完成后和我們?nèi)ナ褂?b>vuex一樣 在main.js去引入聲明這個(gè)package:

import Vue from "vue"
import Vuelidate from "vuelidate"
Vue.use(Vuelidate)

當(dāng)然你也可以在需要用到驗(yàn)證的組件里去引用一個(gè)相對(duì)小的版本:

import { validationMixin } from "vuelidate"

var Component = Vue.extend({
  mixins: [validationMixin],
  validation: { ... }
})

如果你偏好通過require這樣的形式 你也可以這樣引入:

const { validationMixin, default: Vuelidate } = require("vuelidate")
const { required, minLength } = require("vuelidate/lib/validators")
2.使用

其實(shí)使用起來真的很方便 下面舉例來說就是在我的項(xiàng)目里的使用

1.注冊(cè)驗(yàn)證

在用戶注冊(cè)時(shí) 我們通常的需要處理的表單字段就是name,email,password,confirm_pwd

首先我在Register.vue這個(gè)組件文件中把基本的樣式結(jié)構(gòu)寫好 這取決于每個(gè)人

接著是我們對(duì)表單數(shù)據(jù)的驗(yàn)證:

這里是對(duì)用戶名和郵箱的驗(yàn)證 就像之前提到的 我們先引入我們的驗(yàn)證規(guī)則:

import { required,minLength,between,email } from "vuelidate/lib/validators"

因?yàn)槲沂菍?duì)一個(gè)新用戶的注冊(cè) 所以我定義一個(gè)data

 data(){
    return{
        newUser: {
            name:"",
            email:"",
            password:"",
            confirm_pwd:""
        },
    }
},

接著去定義我們的驗(yàn)證字段的規(guī)則:

validations: {
    newUser:{
       name: {
            required,
            minLength: minLength(2)
       },
       email: {
            required,email
       }
    }
},

定義這些驗(yàn)證規(guī)則之后 下面是我的html部分內(nèi)容

用戶名不能為空 用戶名不能太短
郵箱不能為空 請(qǐng)?zhí)顚懻_的郵箱格式

每個(gè)人可以都不一樣 官方文檔上也給出了demo:

Field is required.
Field is required.
Field is required.
Group is invalid.
validationGroup: {{ $v.validationGroup }}

我們先這樣舉例 值得注意的是我們需要去知道他的$v.name里面的內(nèi)容

也就是 $invalid $dirty $error $pending $each 這個(gè)value

特別的注意 $error里的解釋:It is a shorthand to $invalid && $dirty

也就是一個(gè)與的組合 你可以去試著改變這兩者的值 再去看$error的值

當(dāng)然還有兩個(gè)重要的方法: $touch $reset 上面也有實(shí)例 說簡單點(diǎn)就是設(shè)置這個(gè)以及子節(jié)點(diǎn)的$dirtytrue或者false

而設(shè)置這個(gè)$dirty 再結(jié)合 $invalid就可以判斷驗(yàn)證成功與否

$error 是由$dirty$invalid共同決定的

在這里的驗(yàn)證規(guī)則流程是這樣的 如果$errortrue那么form-group會(huì)添加一個(gè)form-group--error這個(gè)class
只有在$errortrue時(shí) 如果你不符合任意一個(gè)驗(yàn)證規(guī)則 例如不符合required 那么就會(huì)提示驗(yàn)證失敗

如果驗(yàn)證錯(cuò)誤就給出錯(cuò)誤提示 這是我的錯(cuò)誤樣式:

.form-group__message{
    display: none;
    font-size: .95rem;
    color: #CC3333;
    margin-left: 10em;
    margin-bottom: 12px;
}
.form-group--error+.form-group__message {
    display: block;
    color: #CC3333;
}

.form-group--error input, .form-group--error input:focus, .form-group--error input:hover, .form-group--error textarea {
    border-color: #CC3333;
}
2.密碼驗(yàn)證

密碼驗(yàn)證其實(shí)和上面的差不多 只不過他的驗(yàn)證規(guī)則時(shí)通過 sameAs 來進(jìn)行驗(yàn)證的

3.組合驗(yàn)證

除了上面這些還有一個(gè)組合驗(yàn)證 也就是如果任意一個(gè)不符合驗(yàn)證規(guī)則就不通過 這個(gè)還是挺常用的

我們可以在驗(yàn)證字段這樣去組合:

validations: {
    flatA: { required },
    flatB: { required },
    forGroup: {
      nested: { required }
    },
    validationGroup: ["flatA", "flatB", "forGroup.nested"]
}

如果任意一個(gè)就是FlatA flatB forGroup其中一個(gè)不符合驗(yàn)證規(guī)則 那么$v.validationGroup.$error就是false

4.異步驗(yàn)證

特別是在驗(yàn)證唯一性的時(shí)候 我們肯定會(huì)遇到這樣的一個(gè)場景:

就比如我們的郵箱 如果已經(jīng)注冊(cè)過這個(gè)郵箱了 那么再用這個(gè)郵箱去注冊(cè)顯然不是我們想要的

還有就是我們登錄時(shí)我們需要去核對(duì)我們的用戶的密碼

這邊我給出的實(shí)例就是對(duì)于用戶名的注冊(cè) 如果已經(jīng)注冊(cè)了就會(huì)提示已經(jīng)注冊(cè)過

完全支持async/await語法。它與Fetch API結(jié)合使用也很出色 那么我們可以通過后端API提供的結(jié)果可以進(jìn)行判斷

我們可以去增加我們唯一性的驗(yàn)證:

name: {
    required,
    minLength: minLength(4),
    async isUnique (value) {
       if (value === "") return true
       const response = await fetch(`http://localhost:8000/api/unique/name/${value}`)
       return Boolean(await response.json())
    }
},

這里我現(xiàn)在本地測(cè)試 通過Laravel作為后端來提供的數(shù)據(jù)校驗(yàn) 實(shí)際項(xiàng)目中的話可以再結(jié)合數(shù)據(jù)庫

//用戶驗(yàn)證路由
Route::group(["prefix"=>"unique","middleware"=>["api","cors"]], function () {
    Route::get("/name/{value}",function(Request $request,$value){
        if($value==="gavin"){
            return response()->json(false);
        }
        return response()->json(true);
    });
});

如果我們?nèi)プ?cè) gavin這個(gè)用戶就會(huì)提示該昵稱已經(jīng)被注冊(cè) 因?yàn)樵谟脩裘以黾恿?b>isUnique驗(yàn)證

用戶名已經(jīng)被注冊(cè)

顯示結(jié)果應(yīng)該是這樣的:

5.自定義驗(yàn)證

同樣的我們不僅可以使用它提供給我們的驗(yàn)證規(guī)則 我們也可以自定義驗(yàn)證規(guī)則并與之前的進(jìn)行組合

官方給出了一個(gè)簡單實(shí)例:

export default value => {
  if (Array.isArray(value)) return !!value.length

  return value === undefined || value === null
    ? false
    : !!String(value).length
}
相關(guān)網(wǎng)址

github地址

package官網(wǎng)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22473.html

相關(guān)文章

  • vue-cli vuelidate基于后端數(shù)據(jù)驗(yàn)證注冊(cè)

    摘要:介紹在實(shí)現(xiàn)基本的驗(yàn)證之后我們需要去真正實(shí)現(xiàn)項(xiàng)目中的注冊(cè)登錄以及我們的驗(yàn)證流程有的具體的代碼我也會(huì)放到我的上面后端以及數(shù)據(jù)準(zhǔn)備對(duì)于前端的請(qǐng)求以作為后端項(xiàng)目需要對(duì)數(shù)據(jù)進(jìn)行處理和相應(yīng)的反饋我們可以先去創(chuàng)建在項(xiàng)目終端生成后就去定義好字段信息 介紹 在實(shí)現(xiàn)vuelidate基本的驗(yàn)證之后 我們需要去真正實(shí)現(xiàn)項(xiàng)目中的注冊(cè)登錄以及我們的驗(yàn)證流程 有的具體的代碼我也會(huì)放到我的gist上面 后端api以...

    chunquedong 評(píng)論0 收藏0
  • 推薦給新手35個(gè)好用Vue開源庫

    摘要:無論是開發(fā)新手還是經(jīng)驗(yàn)豐富的老手,我們都喜歡開源軟件包。所幸的是,隨著社區(qū)的不斷壯大,每天都會(huì)出現(xiàn)一些很好的軟件包。在下文中,我們將推薦一些非常好用的開源庫是一個(gè)非常易用的漸進(jìn)式框架,用于構(gòu)建用戶界面。的一個(gè)極簡主義的深色設(shè)計(jì)系統(tǒng)。 無論是開發(fā)新手還是經(jīng)驗(yàn)豐富的老手,我們都喜歡開源軟件包。對(duì)于開發(fā)者來說,如果沒有這些開源軟件包,很難想象我們的生活會(huì)變得多么疲憊不堪,而且靠咖啡度日也會(huì)成...

    oliverhuang 評(píng)論0 收藏0
  • vuejs2.0制作最簡單頂部菜單滑動(dòng)效果

    摘要:此方法可適用于普通頁面,也可以是其他,使用相關(guān)樣式即可。下面效果是橫向滾動(dòng),也可以使用修改為垂直滾動(dòng)。 此方法可適用于普通html頁面,也可以是其他,使用相關(guān)css樣式即可。下面效果是橫向滾動(dòng),也可以使用overflow-y: scroll; 修改為垂直滾動(dòng)。 主要代碼部分: {{item.so...

    linkFly 評(píng)論0 收藏0
  • vuejs2.0 封裝通用組件,build生成js,并發(fā)布到npm

    摘要:網(wǎng)上看了一些文章,一般都是把封裝好的格式的文件發(fā)布到,感覺不太像一般組件的封裝形式,故特意書寫此文,希望能幫助到各位碼友。本文以封裝一個(gè)分頁組件為例,把它生成目標(biāo)文件,生成壓縮包測(cè)試,并發(fā)布到。修改輸出文件到下,生成文件名為。 網(wǎng)上看了一些文章,一般都是把封裝好的.vue格式的文件發(fā)布到npm,感覺不太像一般組件的封裝形式,故特意書寫此文,希望能幫助到各位碼友。 本文以封裝一個(gè)分頁...

    ZHAO_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<