<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
vue 中表單欄位驗證的寫法和方式有多種,本篇文章介紹三種較為常用的驗證方式。
<!-- 表單 --> <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>
data() { return { // 省略別的資料定義 ... // 表單驗證 formRules: { userName: [ {required: true,message: "請輸入使用者名稱稱",trigger: "blur"} ] } } }
formRules
:與上文 '表單內容' 中 <el-form> 表單的 :rules 屬性值相同userName
:與上文 '表單內容' 中 <el-form-item> 表單子元素的 prop 屬性值相同<!-- 表單 --> <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>
data 資料沒有內容
表單內容
<!-- 表單 --> <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>
表單內容與第一種方式寫法一致,這裡不再贅述
script 內容
<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 { data() { return { // 省略別的資料定義 ... // 表單驗證 formRules: { accountNumber: [ {required: true,validator: validatorAccountNumber,trigger: "blur"} ] } } } } </script>
import
:先引入了外部的驗證規則 const
:定義一個規則常數,常數名可變, '= (rule, value, callback) => {}' 為固定格式,value 入參為驗證的欄位值formRules -> accountNumber
:表單驗證中使用 validator 指定自定義校驗規則常數名稱validate.js
/* 銀行賬戶 */ export function validateAccountNumber(str) { const reg = /^([1-9]{1})(d{14}|d{18})$/ return reg.test(str) }
驗證規則
以上都是在失去焦點時的驗證,下面來分析一下如何在表單提交時驗證
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>
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) }
效果圖
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45