最近有一個pc端后台的項目
用element-ui開發,有很多表單提交,所以這里寫一下 rules校驗
html中:
一定要注意
prop,ref,model ,rules 這幾個屬性一定要添加,否則校驗不生效,以及對應的值 對應
<!-- ref 表單被引用時的名稱,標識 this.$refs.shop.validate() 與這個對應--> <!-- model 表單數據對象 和data中shop對應--> <!-- rules 表單校驗規則,和data中保持一致 submitRules--> <el-form ref="shop" :model="shop" :rules="submitRules" label-width="120px"> <!-- prop:表單域 model 字段,要和data中保持一致,在使用 validate、resetFields 方法的情況下,該屬性是必填的--> <el-form-item prop="name" label="店鋪名稱"> <el-input name="name" v-model="shop.name" /> </el-form-item> </el-form>
js:
export default { name: "Setin", data() { return { // 表單的對應數據 shop: { name: '', codeid: '', id: '', code: '', phone: '', email: '', password: '', surepassword: '' }, // 檢驗規則 submitRules: { // 字段名添加校驗規則 以及觸發條件 email: [ {required: false, trigger: "blur" } ], // 除了必填其他的校驗 phone: [ {required: true, trigger: "blur", validator: vaildatePhone } ], name: [ {required: true, trigger: "blur", message: "該項為必填項"} ], id: [ {required: true, trigger: "blur", message: "該項為必填項"} ], code: [ {required: true, trigger: "blur", message: "該項為必填項"} ], codeid: [ {required: true, trigger: "blur", message: "該項為必填項"} ], surepassword: [ {required: true, trigger: "blur", message: "該項為必填項"} ], password: [ {required: true, trigger: "blur", message: "該項為必填項"} ] }, } }, methods: { }, onSubmit() { // 校驗通過以后 掉接口 this.$refs.shop 和html中ref對應 this.$refs.shop.validate(valid => { if (valid) { //成功回調 } else { //失敗回調 } }); }, } }
校驗規則
export function isEmail(val) { return /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/.test(val) }
完整代碼:
<template> <div> <div class="app-container"> <!-- ref 表單被引用時的名稱,標識 this.$refs.shop.validate() 與這個對應--> <!-- model 表單數據對象 和data中shop對應--> <!-- rules 表單校驗規則,和data中保持一致 submitRules--> <el-form ref="shop" :model="shop" :rules="submitRules" label-width="120px"> <!-- prop:表單域 model 字段,要和data中保持一致,在使用 validate、resetFields 方法的情況下,該屬性是必填的--> <el-form-item prop="name" label="店鋪名稱"> <el-input name="name" v-model="shop.name" /> </el-form-item> <el-form-item prop="id" label="店鋪賬號"> <el-input name="id" v-model="shop.id" /> </el-form-item> <el-form-item prop="password" label="登錄密碼"> <el-input name="password" type="password" v-model="shop.password" /> </el-form-item> <el-form-item prop="surepassword" label="確認密碼"> <el-input name="surepassword" type="password" v-model="shop.surepassword" /> </el-form-item> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane label="手機號碼" name="phone"> <el-form-item prop="phone" label="手機號碼"> <el-input name="phone" v-model="shop.phone" /> </el-form-item> </el-tab-pane> <el-tab-pane label="郵箱" name="email"> <el-form-item prop="email" label="郵箱"> <el-input name="email" v-model="shop.email" /> </el-form-item> </el-tab-pane> </el-tabs> <el-form-item prop="code" label="圖片驗證碼"> <el-row> <el-col :span="8"> <el-input name="code" v-model="shop.code" /> </el-col> <el-col :offset="1" :span="4" style="height:40px;"><img :src="imgUrl" @click="getVerifyCodeFun"/></el-col> </el-row> </el-form-item> <el-form-item prop="codeid" label="驗證碼"> <el-input name="codeid" v-model="shop.codeid"/> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">提交</el-button> <el-button @click="onCancel">取消</el-button> </el-form-item> </el-form> </div> </div> </template> <script> import { getVerifyCode,businessRegister } from "@/api/business"; // 引入公用的校驗規則 import { isPhone,isEmail } from "@/utils/validate"; // 根據校驗規則,給與單獨的提示 const vaildatePhone=(rule,value,callback)=>{ if(!isPhone(value)){ callback(new Error("請輸入正確的手機號")); }else{ callback() } }; const validateEmail = (rule, value, callback) => { if(!isEmail(value)){ callback(new Error("請輸入正確的郵箱")); }else{ callback() } }; export default { name: "Setin", data() { return { // 表單的對應數據 shop: { name: '', codeid: '', id: '', code: '', phone: '', email: '', password: '', surepassword: '' }, // 檢驗規則 submitRules: { // 字段名添加校驗規則 以及觸發條件 email: [ {required: false, trigger: "blur" } ], // 除了必填其他的校驗 phone: [ {required: true, trigger: "blur", validator: vaildatePhone } ], name: [ {required: true, trigger: "blur", message: "該項為必填項"} ], id: [ {required: true, trigger: "blur", message: "該項為必填項"} ], code: [ {required: true, trigger: "blur", message: "該項為必填項"} ], codeid: [ {required: true, trigger: "blur", message: "該項為必填項"} ], surepassword: [ {required: true, trigger: "blur", message: "該項為必填項"} ], password: [ {required: true, trigger: "blur", message: "該項為必填項"} ] }, imgUrl: "", activeName: 'phone' } }, methods: { handleClick(tab, event) { // 切換手機號 郵箱 驗證 if(tab.name=='phone'){ this.submitRules.email=[ {required: false, trigger: "blur"} ]; this.submitRules.phone=[ {required: true, trigger: "blur", validator: vaildatePhone } ] }else{ this.submitRules.email=[ {required: true, trigger: "blur", validator:validateEmail} ]; this.submitRules.phone=[ {required: false, trigger: "blur"} ] } }, getVerifyCodeFun() { getVerifyCode().then(data => { // 傳輸文件流 ajax 必須有 responseType: 'arraybuffer' ,然后對數據進行前端拼接 let imgUrl = "data:image/png;base64," + btoa( new Uint8Array(data).reduce( (data, byte) => data + String.fromCharCode(byte), "" ) ); // 這里如果不清楚 new Uint8Array(data.data) 中data的指代,就看看最上面的那個圖 this.imgUrl = imgUrl; }); }, onSubmit() { console.log(this.submitRules) // 校驗通過以后 掉接口 this.$refs.shop 和html中ref對應 this.$refs.shop.validate(valid => { if (valid) { businessRegister({ storeName:this.shop.name, username:this.shop.id, password:this.shop.password, contact:this.shop.phone ? this.shop.phone : this.shop.email }).then( data=>{ this.$message('成功') }) } else { console.log("error submit!!"); this.$message({ message: '錯誤!', type: 'error' }) return false; } }); }, onCancel() { this.$message({ message: '取消!', type: 'warning' }) this.shop={ name: '', codeid: '', id: '', code: '', phone: '', email: '', password: '', surepassword: '' } } }, mounted() { this.getVerifyCodeFun(); } } </script> <style scoped> </style>
有一個博客 就這個問題寫的比較詳細 放在這里方便以后查看 https://blog.csdn.net/qq_41402200/article/details/86016313