Vue表單驗(yàn)證插件Vue Validator使用方法詳解
Vue-validator 是Vue的表單驗(yàn)證插件,供大家參考,具體內(nèi)容如下
Vue版本: 1.0.24
Vue-validator版本: 2.1.3
基本使用
<div id="app">
<validator name="validation">
<form novalidate>
<div class="username-field">
<label for="username">username:</label>
<input type="text" id="username" v-validate:username="['required']" />
</div>
<div class="comment-filed">
<label for="comment">comment:</label>
<input type="text" id="comment" v-validate:comment="{maxlength: 256}" />
</div>
<div class="errors">
<p v-if="$validation.username.required">請輸入你的名字</p>
<p v-if="$validation.comment.maxlength">您的評論太長了</p>
</div>
<input type="submit" value="send" v-if="$validation.valid" />
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app'
});
</script>
將要驗(yàn)證的表單包裹在validator自定義元素指令中,而在要驗(yàn)證的表單控件元素的 v-validate 屬性上綁定相應(yīng)的校驗(yàn)規(guī)則。
驗(yàn)證結(jié)果會保存在組建實(shí)例的 $validation 屬性下。 $validation 是由 validator 元素和 name 屬性和 $ 前綴組件
驗(yàn)證結(jié)果結(jié)構(gòu)
{
// 表單整體驗(yàn)證
"valid": false, // 字段校驗(yàn)是否通過
"invalid": true, // valid 取反
"touched": false, // 校驗(yàn)字段所在元素獲得通過焦點(diǎn)時(shí)返回true,否則返回false
"untouched": true, // touched 取反
"modified": false, // 當(dāng)元素值與初始值不同時(shí)返回true,否則返回false
"dirty": false, // 字段值改變過至少一次返回true,否則返回false
"pristine": true, // dirty 取反
// 字段單一驗(yàn)證
"username": {
"required": true,
"modified": false,
"pristine": true,
"dirty": false,
"untouched": true,
"touched": false,
"invalid": true,
"valid": false
},
"comment": {
"maxlength": false,
"modified": false,
"pristine": true,
"dirty": false,
"untouched": true,
"touched": false,
"invalid": false,
"valid": true
}
}
校驗(yàn)結(jié)果由兩部分組成。表單整體校驗(yàn)結(jié)果和單個(gè)字段校驗(yàn)結(jié)果。
驗(yàn)證器語法
v-validate 指令語法:
v-validate[:field]=”array literal | object literfal | binding”
校驗(yàn)字段名field
field用來標(biāo)識校驗(yàn)字段,之后可以用該字段來引用校驗(yàn)結(jié)果
v-validate 指令用來定義校驗(yàn)規(guī)則,其值可以是數(shù)組字面量,對象字面量,組件實(shí)例數(shù)組屬性名。
數(shù)組字面量
當(dāng)校驗(yàn)器不需要額外參數(shù)時(shí),可以使用數(shù)組字面量形式,如 required 校驗(yàn)器,只要出現(xiàn)就帶I表該校驗(yàn)器所在元素是必填項(xiàng)。
<div id="app">
<validator name="validation">
<form novalidate>
Zip: <input type="text" v-validate:zip="['required']" /><br />
<div>
<span v-if="$validation.zip.required">郵政編碼是必填項(xiàng)</span>
</div>
</form>
</validator>
</div>
對象字面量
對象字面量語法適合需要額外參數(shù)的校驗(yàn)器。如限制輸入長度的校驗(yàn)器 minlength,需要說明限制長度多少。
<div id="app">
<validator name="validation">
<form novalidate>
ID: <input type="text" v-validate:id="{ required:true, minlength: 3, maxlength: 16 }" />
<br />
<div>
<p v-if="$validation.id.required">ID不能為空</p>
<p v-if="$validation.id.minlength">你的ID名字太短</p>
<p v-if="$validation.id.maxlength">你的ID名字太長</p>
</div>
<input type="submit" value="send" v-if="$validation.valid" />
</form>
</validator>
</div>
還可以用 對象字面量語法通過 rule 字段來自定義驗(yàn)證規(guī)則
<div id="app">
<validator name="validation">
<form novalidate>
ID: <input type="text" v-validate:id="{minlength: {rule: 3}, required: true, maxlength: {rule: 16}}" />
<br />
<div>
<p v-if="$validation.id.required">ID不能為空</p>
<p v-if="$validation.id.minlength">你的ID名字太短</p>
<p v-if="$validation.id.maxlength">你的ID名字太長</p>
</div>
<input type="submit" value="send" v-if="$validation.valid" />
</form>
</validator>
</div>
實(shí)例數(shù)據(jù)屬性
v-validate 的值可以是組建實(shí)例的數(shù)據(jù)屬性。這樣可以用來動態(tài)綁定校驗(yàn)規(guī)則。
<div id="app">
<validator name="validation">
<form novalidate>
ID: <input type="text" v-validate:id="rules" /><br />
<div>
<p v-if="$validation.id.required">不能為空</p>
<p v-if="$validation.id.minlength">你的ID太短</p>
<p v-if="$validation.id.maxlength">你的ID太長</p>
</div>
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
rules: {
required: true,
minlength: 3,
maxlength: 16
}
}
});
</script>
內(nèi)置校驗(yàn)規(guī)則
vue-validator 內(nèi)置一些常用的驗(yàn)證規(guī)則:
- required — 輸入值不能為空
- pattern — 必須匹配pattern表示的正則表達(dá)式
- minlength — 輸入值長度不能小于minlength表示的值
- maxlength — 輸入的值不能大于maxlength表示的值
- min — 輸入值不能小于min表示的值
- max — 輸入值不能大于max表示的值
與v-model同時(shí)使用
vue-validator會自動校驗(yàn)通過v-model動態(tài)設(shè)置的值。
<div id="app">
<validator name="validation">
<form novalidate>
message: <input type="text" v-model="msg" v-validate:message="{required: ture, minlength: 8}" />
<br />
<p v-if="$validation.message.required">message不能為空</p>
<p v-if="$validation.message.minlength">message輸入太長位數(shù)</p>
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
msg: ''
}
});
setTimeout(function () {
vm.msg = 'hello world!';
}, 2000);
</script>
重置校驗(yàn)結(jié)果
通過在Vue組件實(shí)例上調(diào)用$resetValidation();方法來動態(tài)重置校驗(yàn)結(jié)果。
<div id="app">
<validator name="validation">
<form novalidate>
<div class="username-field">
<label for="username">username:</label>
<input type="text" id="username" v-validate:username="['required']" />
</div>
<div class="comment-filed">
<label for="comment">comment:</label>
<input type="text" id="comment" v-validate:comment="{maxlength: 256}" />
</div>
<div class="errors">
<p v-if="$validation.username.required">用戶名不能為空</p>
<p v-if="$validation.comment.maxlength">輸入文字超過256個(gè)</p>
<input type="submit" value="send" v-if="$validation.valid" />
<button type="button" @click="onReset">Reset Validation</button>
</div>
<pre>{{$validation | json}}</pre>
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app',
methods: {
onReset: function () {
this.$resetValidation();
}
}
});
</script>
復(fù)選框checkbox
<div id="app">
<validator name="validation">
<form novalidate>
<h1>調(diào)查</h1>
<fieldset>
<legend>請選擇水果</legend>
<input type="checkbox" id="apple" value="apple" v-validate:fruits="{
required: { rule: true, message: requiredErrorMsg },
minlength: { rule: 1, message: minlengthErrorMsg },
maxlength: { rule: 2, message: maxlengthErrorMsg }
}" />
<label for="apple">Apple</label>
<input type="checkbox" id="orange" value="orange" v-validate:fruits />
<label for="orange">Orange</label>
<input type="checkbox" id="grape" value="grape" v-validate:fruits />
<label for="grape">Grape</label>
<input type="checkbox" id="banana" value="banana" v-validate:fruits />
<label for="banana">Banana</label>
<ul class="errors">
<li v-for="msg in $validation.fruits">
<p>{{msg | json}}</p>
</li>
</ul>
</fieldset>
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app',
computed: {
requiredErrorMsg: function () {
return '請選擇水果';
},
minlengthErrorMsg: function () {
return '請選擇至少1個(gè)水果!';
},
maxlengthErrorMsg: function () {
return '請選擇最多2個(gè)水果!';
}
}
});
</script>
下拉類表select
<div id="app">
<validator name="validation">
<form novalidate>
<select v-validate:lang="{required: true}">
<option value="">請選擇語言</option>
<option value="javascript">javascript</option>
<option value="php">php</option>
<option value="node">node</option>
</select>
<div class="errors">
<p v-if="$validation.lang.required">不能為空!</p>
</div>
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app'
});
</script>
校驗(yàn)狀態(tài)class
各校驗(yàn)狀態(tài)都有其對應(yīng)的class(默認(rèn)) 也可以自定義校驗(yàn)狀態(tài)class
<validator name="validation" :classes="{touched: 'touehc-validator', dirty: 'dirty-validator'}">
<label for="username">username</label>
<<input type="text" id="username" :classes="{valid: 'valid-username', invalid: 'invalid-username'}" v-validate:username="{required: {rule: true, message: 'required you name!'}}">
</validator>
<!-- classes屬性只能在validator元素或應(yīng)用了v-validate的元素上使用有效 -->
分組校驗(yàn)
vue-validator支持分組校驗(yàn)。例如重復(fù)密碼功能。
<div id="app">
<validator name="validation" :groups="['passwordGroup']">
<form novalidate>
username: <input type="text" v-validate:username="['required']" /><br />
password: <input type="password" v-validate:password="{ minlength: 8, required: true }" group="passwordGroup" /><br />
comfirm password: <input type="password" v-validate:password-comfirm="{minlength: 8, required: true}" group="passwordGroup" />
<div class="errors">
<p v-if="$validation.username.required">用戶名不能為空</p>
<p v-if="$validation.password.required">密碼不能為空</p>
<p v-if="$validation.password.minlength">密碼不能少于8位</p>
<p v-if="$validation.password-comfirm.required">重復(fù)密碼不能為空</p>
<p v-if="$validation.password-comfirm.minlength">密碼不能少于8位</p>
<p v-if="$validation.passwordGroup.valid">密碼不一致</p>
</div>
</form>
</validator>
</div>
<script src="http://cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="http://cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app'
});
</script>
本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。
關(guān)于vue.js組件的教程,請大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue 使用axios 數(shù)據(jù)請求第三方插件的使用教程詳解
這篇文章主要介紹了vue 使用axios 數(shù)據(jù)請求第三方插件的使用 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Vue.js點(diǎn)擊切換按鈕改變內(nèi)容的實(shí)例講解
今天小編就為大家分享一篇Vue.js點(diǎn)擊切換按鈕改變內(nèi)容的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
vue使用canvas實(shí)現(xiàn)移動端手寫簽名
這篇文章主要為大家詳細(xì)介紹了基于vue使用canvas實(shí)現(xiàn)移動端手寫簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
Vue.js:使用Vue-Router 2實(shí)現(xiàn)路由功能介紹
本篇文章主要介紹了Vue.js:使用Vue-Router 2實(shí)現(xiàn)路由功能介紹,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02

