在vue中使用rules對表單字段進行驗證方式
vue 中表單字段驗證的寫法和方式有多種,本篇文章介紹三種較為常用的驗證方式。
1. 寫在 data 中驗證
表單內(nèi)容
<!-- 表單 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> <el-form-item label="用戶名稱:" prop="userName"> <el-input v-model="rulesForm.userName" style="width:300px" maxlength="50"/> </el-form-item> </el-form>
- <el-form>:代表這是一個表單
- <el-form> -> ref:表單被引用時的名稱,標(biāo)識
- <el-form> -> rules:表單驗證規(guī)則
- <el-form> -> model:表單數(shù)據(jù)對象
- <el-form> -> label-width:表單域標(biāo)簽的寬度,作為 Form 直接子元素的 form-item 會繼承該值
- <el-form> -> <el-form-item>:表單中的每一項子元素
- <el-form-item> -> label:標(biāo)簽文本
- <el-form-item> -> prop:表單域 model 字段,在使用 validate、resetFields 方法的情況下,該屬性是必填的
- <el-input>:輸入框
- <el-input> -> v-model:綁定的表單數(shù)據(jù)對象屬性
- <el-input> -> style:行內(nèi)樣式
- <el-input> -> maxlength:最大字符長度限制
data 數(shù)據(jù)
data() { return { // 省略別的數(shù)據(jù)定義 ... // 表單驗證 formRules: { userName: [ {required: true,message: "請輸入用戶名稱",trigger: "blur"} ] } } }
formRules
:與上文 '表單內(nèi)容' 中 <el-form> 表單的 :rules 屬性值相同userName
:與上文 '表單內(nèi)容' 中 <el-form-item> 表單子元素的 prop 屬性值相同- 驗證內(nèi)容是:必填,失去焦點時驗證,如果為空,提示信息為 '請輸入用戶名稱'
2. 寫在行內(nèi)
表單內(nèi)容
<!-- 表單 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> <el-form-item label="銀行名稱:" prop="accountName" :rules="[{required:true,message:'請輸入銀行名稱',trigger:'blur'}]"> <el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/> </el-form-item> </el-form>
- <el-form-item> -> rules:和第一種方式表現(xiàn)的效果一致,只是寫法不一樣,這里不再贅述
data 數(shù)據(jù)沒有內(nèi)容
3. 引入外部定義的規(guī)則
表單內(nèi)容
<!-- 表單 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> <el-form-item label="銀行卡號:" prop="accountNumber"> <el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="19"/> </el-form-item> </el-form>
表單內(nèi)容與第一種方式寫法一致,這里不再贅述
script 內(nèi)容
<script> // 引入了外部的驗證規(guī)則 import { validateAccountNumber } from "@/utils/validate"; // 判斷銀行卡賬戶是否正確 const validatorAccountNumber = (rule, value, callback) => { if (!value) { return callback(new Error("請輸入賬戶信息")); } else { if (validateAccountNumber(value)) { callback(); } else { return callback(new Error('賬號格式不正確')) } } }; export default { data() { return { // 省略別的數(shù)據(jù)定義 ... // 表單驗證 formRules: { accountNumber: [ {required: true,validator: validatorAccountNumber,trigger: "blur"} ] } } } } </script>
import
:先引入了外部的驗證規(guī)則const
:定義一個規(guī)則常量,常量名可變, '= (rule, value, callback) => {}' 為固定格式,value 入?yún)轵炞C的字段值formRules -> accountNumber
:表單驗證中使用 validator 指定自定義校驗規(guī)則常量名稱
validate.js
/* 銀行賬戶 */ export function validateAccountNumber(str) { const reg = /^([1-9]{1})(\d{14}|\d{18})$/ return reg.test(str) }
驗證規(guī)則
以上都是在失去焦點時的驗證,下面來分析一下如何在表單提交時驗證
1. 表單的提交按鈕
<!-- 表單 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> <el-form-item> <el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button> <el-button @click="cancel">取消</el-button> </el-form-item> </el-form>
- <el-button>:按鈕
- <el-button> -> type:按鈕類型
- <el-button> -> @click:按鈕點擊時觸發(fā)的事件,這里注意方法的入?yún)?'rulesForm',這里要與 <el-form> 表單的 rel 屬性值一致
2. methods 方法
methods: { // 保存 onSubmit(formName) { this.$refs[formName].validate(valid => { if (valid) { console.log("success submit!!"); }else{ console.log("error submit!!"); } }); }, // 取消 cancel() { } }
this.$refs[formName].validate:formName 就是傳入的 'rulesForm',與 <el-form> 表單的 rel 屬性值一致,這樣就指定好需要驗證的表單了
完整示例代碼如下
1. rules.vue
<template> ? <div class="app-container"> ? ? <el-tabs v-model="activeName"> ? ? ? <el-tab-pane label="表單" name="rulesPane" @tab-click="handleClick"> ? ? ? ? <!-- 表單 --> ? ? ? ? <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> ? ? ? ? ? <el-form-item label="用戶名稱:" prop="userName"> ? ? ? ? ? ? <el-input v-model="rulesForm.userName" style="width:300px" maxlength="50"/> ? ? ? ? ? </el-form-item> ? ? ? ? ? <el-form-item label="銀行名稱:" prop="accountName" :rules="[{required:true,message:'請輸入銀行名稱',trigger:'blur'}]"> ? ? ? ? ? ? <el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/> ? ? ? ? ? </el-form-item> ? ? ? ? ? <el-form-item label="銀行卡號:" prop="accountNumber"> ? ? ? ? ? ? <el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="50"/> ? ? ? ? ? </el-form-item> ? ? ? ? ? <el-form-item> ? ? ? ? ? ? <el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button> ? ? ? ? ? ? <el-button @click="cancel">取消</el-button> ? ? ? ? ? </el-form-item> ? ? ? ? </el-form> ? ? ? </el-tab-pane> ? ? </el-tabs> ? </div> </template>
<script> import { validateAccountNumber } from "@/utils/validate"; ? // 判斷銀行卡賬戶是否正確 const validatorAccountNumber = (rule, value, callback) => { ? if (!value) { ? ? return callback(new Error("請輸入賬戶信息")); ? } else { ? ? if (validateAccountNumber(value)) { ? ? ? callback(); ? ? } else { ? ? ? return callback(new Error('賬號格式不正確')) ? ? } ? } }; ? export default { ? name: "rules", ? data() { ? ? return { ? ? ? activeName: "rulesPane", ? ? ? defaultProps: { ? ? ? ? children: "children", ? ? ? ? label: "label" ? ? ? }, ? ? ? rulesForm: { ? ? ? }, ? ? ? // ? 表單驗證 ? ? ? formRules: { ? ? ? ? userName: [ ? ? ? ? ? { ? ? ? ? ? ? required: true, ? ? ? ? ? ? message: "請輸入用戶名稱", ? ? ? ? ? ? trigger: "blur" ? ? ? ? ? } ? ? ? ? ], ? ? ? ? accountNumber: [ ? ? ? ? ? { ? ? ? ? ? ? required: true, ? ? ? ? ? ? validator: validatorAccountNumber, ? ? ? ? ? ? trigger: "blur" ? ? ? ? ? } ? ? ? ? ], ? ? ? } ? ? }; ? }, ? created() {}, ? mounted() {}, ? methods: { ? ? handleClick(tab) { ? ? ?? ? ? }, ? ? // 取消 ? ? cancel() { ? ? ?? ? ? }, ? ? // 保存 ? ? onSubmit(formName) { ? ? ? this.$refs[formName].validate(valid => { ? ? ? ? if (valid) { ? ? ? ? ? console.log("success submit!!"); ? ? ? ? } else { ? ? ? ? ? console.log("error submit!!"); ? ? ? ? ? return false; ? ? ? ? } ? ? ? }); ? ? } ? } }; </script> ? <style lang="scss"> </style>
2. validate.js
/* 銀行賬戶 */ export function validateAccountNumber(str) { const reg = /^([1-9]{1})(\d{14}|\d{18})$/ return reg.test(str) }
效果圖
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)的相關(guān)資料,Vue-json-viewer是一個Vue組件,用于在Vue應(yīng)用中顯示JSON數(shù)據(jù)的可視化工具,需要的朋友可以參考下2023-11-11VUE前端從后臺請求過來的數(shù)據(jù)進行轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)操作
VUE前端從后臺請求過來的數(shù)據(jù)進行轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11vue?調(diào)用瀏覽器攝像頭實現(xiàn)及原理解析
這篇文章主要為大家介紹了vue調(diào)用瀏覽器攝像頭實現(xiàn)及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06