国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

實(shí)現(xiàn)elementUI表單的全局驗(yàn)證的方法步驟

2019-11-19 11:41:08
字體:
供稿:網(wǎng)友

使用ElementUi搭建框架的時(shí)候,大家應(yīng)該都有考慮過怎么做全局驗(yàn)證,畢竟復(fù)制粘貼什么的是最煩了,這里分享下個(gè)人的解決方法。

驗(yàn)證規(guī)則

分析規(guī)則

一般驗(yàn)證規(guī)則,主要是是否必填,不為空,以及參數(shù)類型的驗(yàn)證。 基于這個(gè)條件,我們開始找找思路, 單個(gè)字段的驗(yàn)證是這樣的:

name: { required: 是否必填, validator: 自定義規(guī)則, message: 失敗提示消息(非自定義時(shí)觸發(fā)), trigger: 觸發(fā)方式}

循環(huán)實(shí)現(xiàn)

固定的規(guī)則。當(dāng)一個(gè)東西固定之后,那必然是可以重復(fù)使用的,并且可以快速生成,我們可以用循環(huán)來實(shí)現(xiàn)它。 但是用循環(huán)來實(shí)現(xiàn),我們則需要一個(gè)數(shù)據(jù)規(guī)則。

定義數(shù)據(jù)規(guī)則

分析下需要的字段,大概就是以下幾種,其他的可以根據(jù)自身的需求去增加:

  • 驗(yàn)證的字段名 label
  • 驗(yàn)證的值 value
  • 驗(yàn)證的類型 type
  • 是否必填 required
  • 自定義規(guī)則 validator

那最終我們得到的是這樣一個(gè)字段配置列表:

fieldList: [   {label: '賬號', value: 'account', type: 'input', required: true, validator: checkAccount},   {label: '密碼', value: 'password', type: 'password', required: true, validator: checkPwd},   {label: '昵稱', value: 'name', type: 'input', required: true},   {label: '性別', value: 'sex', type: 'select', list: 'sexList', required: true},   {label: '頭像', value: 'avatar', type: 'slot', className: 'el-form-block'},   {label: '手機(jī)號碼', value: 'phone', type: 'input', validator: checkPhone},   {label: '微信', value: 'wechat', type: 'input', validator: checkWechat},   {label: 'QQ', value: 'qq', type: 'input', validator: checkQQ},   {label: '郵箱', value: 'email', type: 'input', validator: checkEmail},   {label: '描述', value: 'desc', type: 'textarea', className: 'el-form-block'},   {label: '狀態(tài)', value: 'status', type: 'select', list: 'statusList', required: true}  ]

form完整的字段配置建議參考:

  formInfo: {  ref: null,  data: {   id: '', // *唯一ID   account: '', // *用戶賬號   password: '', // *用戶密碼   name: '', // *用戶昵稱   type: 2, // *用戶類型: 0: 手機(jī)注冊 1: 論壇注冊 2: 管理平臺添加   sex: 0, // *性別: 0:男 1:女   avatar: '', // 頭像   phone: '', // 手機(jī)號碼   wechat: '', // 微信   qq: '', // qq   email: '', // 郵箱   desc: '', // 描述   status: 1 // *狀態(tài): 0:停用,1:啟用(默認(rèn)為1)',   // create_user: '', // 創(chuàng)建人   // create_time: '', // 創(chuàng)建時(shí)間   // update_user: '', // 修改人   // update_time: '' // 修改時(shí)間  },  fieldList: [   {label: '賬號', value: 'account', type: 'input', required: true, validator: checkAccount},   {label: '密碼', value: 'password', type: 'password', required: true, validator: checkPwd},   {label: '昵稱', value: 'name', type: 'input', required: true},   {label: '性別', value: 'sex', type: 'select', list: 'sexList', required: true},   {label: '頭像', value: 'avatar', type: 'slot', className: 'el-form-block'},   {label: '手機(jī)號碼', value: 'phone', type: 'input', validator: checkPhone},   {label: '微信', value: 'wechat', type: 'input', validator: checkWechat},   {label: 'QQ', value: 'qq', type: 'input', validator: checkQQ},   {label: '郵箱', value: 'email', type: 'input', validator: checkEmail},   {label: '描述', value: 'desc', type: 'textarea', className: 'el-form-block'},   {label: '狀態(tài)', value: 'status', type: 'select', list: 'statusList', required: true}  ],  rules: {},  labelWidth: '120px'  }

實(shí)現(xiàn)驗(yàn)證方法

一: 循環(huán)字段列表,根據(jù)type判斷是提示選擇不能為空,還是輸入不能為空
二:如果字段必填,則根據(jù)是否有自定義驗(yàn)證去生成驗(yàn)證規(guī)則
三: 字段非必填,有自定義規(guī)則生成驗(yàn)證

 // 初始化驗(yàn)證數(shù)據(jù) _initValidate (formInfo) {  const obj = {},  fieldList = formInfo.fieldList  // 循環(huán)字段列表  for (let item of fieldList) {  let type = item.type === 'select' ? '選擇' : '輸入'  if (item.required) {   if (item.validator) {   obj[item.value] = {    required: item.required,    validator: item.validator,    trigger: 'blur'   }   } else {   obj[item.value] = {    required: item.required,    message: '請' + type + item.label,    trigger: 'blur'   }   }  } else if (item.validator) {   obj[item.value] = {   validator: item.validator,   trigger: 'blur'   }  }  }  formInfo.rules = obj }

使用

結(jié)合上面的字段設(shè)計(jì),我在頁面上的使用是這樣的,大家可以根據(jù)自己的字段設(shè)計(jì)去修改,大致實(shí)現(xiàn)過程是這樣的

// mixin中的方法, 初始化字段驗(yàn)證規(guī)則this._initValidate(this.formInfo)

怎么配置到全局

  1. 通過mixin配置,然后在頁面中使用(個(gè)人使用的是mixin)
  2. 配置為全局方法在頁面中調(diào)用
  3. 掛在到vue實(shí)例上,通過this即可訪問

mixins例子

export default { data () { /**  * 頁面上的可復(fù)用的驗(yàn)證規(guī)則  */ // 驗(yàn)證號碼格式 const CHECK_PHONE = (rule, value, callback) => {  let check = this.$validate({label: '號碼', value, rules: ['phone']})  if (!check.result) {  callback(new Error(check.message))  } else {  callback()  } } // 驗(yàn)證號碼格式以及不能為空 const CHECK_PHONE_NOTNULL = (rule, value, callback) => {  let check = this.$validate({label: '號碼', value, rules: ['notnull', 'phone']})  if (!check.result) {  callback(new Error(check.message))  } else {  callback()  } } // 檢測郵箱格式 const CHECK_EMAIL = (rule, value, callback) => {  let check = this.$validate({label: '郵箱', value, rules: ['email']})  if (!check.result) {  callback(new Error(check.message))  } else {  callback()  } } // 檢測郵箱格式以及不能為空 const CHECK_EMAIL_NOTNULL = (rule, value, callback) => {  let check = this.$validate({label: '郵箱', value, rules: ['notnull', 'email']})  if (!check.result) {  callback(new Error(check.message))  } else {  callback()  } } return {  CHECK_PHONE,  CHECK_PHONE_NOTNULL,  CHECK_EMAIL,  CHECK_EMAIL_NOTNULL } }, methods: { // 初始化驗(yàn)證數(shù)據(jù) _initValidate (formInfo) {  const obj = {},  fieldList = formInfo.fieldList  // 循環(huán)字段列表  for (let item of fieldList) {  let type = item.type === 'select' ? '選擇' : '輸入'  if (item.required) {   if (item.validator) {   obj[item.value] = {    required: item.required,    validator: item.validator,    trigger: 'blur'   }   } else {   obj[item.value] = {    required: item.required,    message: '請' + type + item.label,    trigger: 'blur'   }   }  } else if (item.validator) {   obj[item.value] = {   validator: item.validator,   trigger: 'blur'   }  }  }  formInfo.rules = obj } }}

最后

在項(xiàng)目的系統(tǒng)管理模塊中可以看到示例代碼:

項(xiàng)目地址

項(xiàng)目代碼地址

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 融水| 旬邑县| 宿松县| 滕州市| 黄龙县| 金寨县| 读书| 郑州市| 清水县| 临江市| 鹤峰县| 临沧市| 本溪市| 呼图壁县| 调兵山市| 怀宁县| 鄂伦春自治旗| 长治市| 徐州市| 承德县| 丰台区| 基隆市| 新密市| 师宗县| 积石山| 田阳县| 扶风县| 竹北市| 康乐县| 承德市| 安图县| 乌鲁木齐县| 峡江县| 阳信县| 宜黄县| 丰都县| 台中市| 保德县| 页游| 西乌| 仙游县|