电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Vue自定義表單內(nèi)容檢查rules實(shí)例

瀏覽:67日期:2022-11-09 09:52:37

先看個(gè)例子

組件

<el-form-item label='手機(jī)號:' prop='phone_number'> <el-input v-model='formPerson.phone_number'></el-input></el-form-item>

script中

export default { data() { var validateMobilePhone = (rule, value, callback) => { if (value === ’’) { callback(new Error(’負(fù)責(zé)人手機(jī)號不可為空’)); } else { if (value !== ’’) { var reg = /^1[3456789]d{9}$/; if (!reg.test(value)) { callback(new Error(’請輸入有效的手機(jī)號碼’)); } else { callback(); } } } }; return{ formPerson: { phone_number: ’’, }, rules: { phone_number: [ {validator: validateMobilePhone, trigger: ’blur’} ] }, } }}

遇到的坑

在組件中【開始寫的時(shí)候prop自定的名字】

<el-form-item label='手機(jī)號:' prop='phone'> <el-input v-model='formPerson.phone_number'></el-input></el-form-item>

rules中

rules: { phone: [ {validator: validateMobilePhone, trigger: ’blur’} ]}

碰到的坑

當(dāng)輸入正確的手機(jī)號時(shí),顯示為錯(cuò)誤,發(fā)現(xiàn)value并沒有傳過來,為undefined

解決:

prop寫成和數(shù)據(jù)中的參數(shù)的名稱一樣,即phone_number

補(bǔ)充知識:用vue自定義指令v-validated寫一個(gè)全局表單驗(yàn)證

由于不想在單vue文件里用blur等等設(shè)置表單驗(yàn)證并顯示驗(yàn)證失敗的信息,因此思考并封裝了一個(gè)全局自定義指令。

獻(xiàn)上我的代碼。

html

<div class='form-section'> <p>First Name</p> <input type='text' v-model=’form.username’ v-validated:username='[’username’,form.username]' placeholder='' > <div class='error'></div> </div> <div class='form-section'> <p>Last Name</p> <input type='text' v-model=’form.secondname’ placeholder=''> <div class='error'></div> </div> <div class='form-section'> <p>Email</p> <input type='email' v-model=’form.email’ v-validated:email='[’email’,form.email]' placeholder=''> <div class='error'></div> </div> <div class='form-section'> <p>Password</p> <input type='password' v-model=’form.password’ v-validated:password='[’password’,form.password]' autocomplete placeholder=''> <div class='error'></div> </div>

在input上掛載v-validated指令,向指令傳輸 ‘username’的校驗(yàn)類型,和form.username的校驗(yàn)數(shù)據(jù)。

現(xiàn)在封裝v-validated指令

validated.js

import Vue from ’vue’/** * 校驗(yàn)失敗*/function testError (el) { el.style.borderColor = ’#d20000’ el.style.backgroundColor = ’#fff8f8’}/** * 校驗(yàn)成功*/function testCorrect (el) { el.style.borderColor = ’#a3a3a3’ el.nextElementSibling.innerHTML = ’’ el.style.backgroundColor = ’transparent’}/** * 校驗(yàn)用戶名 * */function testUserName (username, el) { if (/^w{3,30}$/g.test(username)) { testCorrect(el) return true } else { testError(el) el.nextElementSibling.innerHTML = ’Username must be 3 to 30 characters’ return false }}/** * 校驗(yàn)郵箱 * */function testEmail (email, el) { if (/^[w-]+@[w-]+(.[w-]+)+$/g.test(email)) { testCorrect(el) return true } else { testError(el) el.nextElementSibling.innerHTML = ’Mailbox format is not correct!’ return false }}/** * 校驗(yàn)密碼 * */function testPwd (pwd, el) { if (/^w{6,30}$/g.test(pwd)) { testCorrect(el) return true } else { testError(el) el.nextElementSibling.innerHTML = ’Password must be 6 to 30 characters’ return false }}Vue.directive(’validated’, { inserted (el, binding) { // 綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用 el.addEventListener(’blur’, () => { switch (binding.value[0]) { case ’username’ : testUserName(binding.def[binding.rawName], el); break case ’email’ : testEmail(binding.def[binding.rawName], el); break case ’password’ : testPwd(binding.def[binding.rawName], el); break } }) }, update: function (el, binding, vNode) { // 更新元素信息時(shí)調(diào)用 binding.def[binding.rawName] = binding.value[1] }})export default { init () { console.log(’*** validated installed ***’) }}

由于沒有找到官方鉤子之間傳遞數(shù)據(jù)的方法,所以自己看著用binding.def下定義updated來作為傳遞數(shù)據(jù),

inserted是節(jié)點(diǎn)插入時(shí)就調(diào)用一次。在這里做元素blur的監(jiān)聽,動態(tài)數(shù)據(jù)由update刷新。

修正:我只定義一個(gè)updated會出現(xiàn)多個(gè)更新數(shù)據(jù)共用一個(gè)參數(shù)名,導(dǎo)致數(shù)據(jù)錯(cuò)亂。

所以我用binding.rawName做指針,放入binding.def下,實(shí)現(xiàn)一個(gè)頁面多個(gè)數(shù)據(jù)多個(gè)處理,因?yàn)閡pdate鉤子是頁面上的任意改動都會觸發(fā),而不是當(dāng)前掛載指令的dom對象變化才會跟著變化。

最后將這個(gè)文件放入main.js

main.js

import validated from ’@/dorajs/validated.js’

Vue.use(validated)

效果如下

Vue自定義表單內(nèi)容檢查rules實(shí)例

Vue自定義表單內(nèi)容檢查rules實(shí)例

Vue自定義表單內(nèi)容檢查rules實(shí)例

完美解決!

以上這篇Vue自定義表單內(nèi)容檢查rules實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 深圳湾1号房价_深圳湾1号二手房源| HDPE储罐_厂家-山东九州阿丽贝防腐设备| 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 学生作文网_中小学生作文大全与写作指导 | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 陕西华春网络科技股份有限公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 南京办公用品网-办公文具用品批发-打印机耗材采购 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 起好名字_取个好名字_好名网免费取好名在线打分 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 江西自考网-江西自学考试网| 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 |