最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年10月30日 08:37:57   作者:乘風(fēng)御浪云帆之上  
這篇文章主要介紹了Vue自定義表單內(nèi)容檢查rules實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

先看個(gè)例子

組件

<el-form-item label="手機(jī)號(hào):" 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ī)號(hào)不可為空'));
   } else {
    if (value !== '') {
    var reg = /^1[3456789]\d{9}$/;
    if (!reg.test(value)) {
     callback(new Error('請(qǐng)輸入有效的手機(jī)號(hào)碼'));
    } else {
     callback();
    }
    }
   }
  };
 
  return{
   formPerson: {
    phone_number: '',
   },
   rules: {
    phone_number: [
    {validator: validateMobilePhone, trigger: 'blur'}
    ]
   },
  }
 }
}

遇到的坑

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

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

rules中

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

碰到的坑

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

解決:

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

補(bǔ)充知識(shí):用vue自定義指令v-validated寫(xiě)一個(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 ***')
 }
}


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

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

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

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

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

main.js

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

Vue.use(validated)

效果如下

完美解決!

以上這篇Vue自定義表單內(nèi)容檢查rules實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue $router和$route的區(qū)別詳解

    vue $router和$route的區(qū)別詳解

    這篇文章主要介紹了vue $router和$route的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • vue2.0 常用的 UI 庫(kù)實(shí)例講解

    vue2.0 常用的 UI 庫(kù)實(shí)例講解

    這篇文章主要介紹了vue2.0 常用的 UI 庫(kù)實(shí)例講解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 前端Vue3實(shí)現(xiàn)圖片標(biāo)點(diǎn)兩種方式總結(jié)

    前端Vue3實(shí)現(xiàn)圖片標(biāo)點(diǎn)兩種方式總結(jié)

    這篇文章主要介紹了如何使用Vue3和Ant?Design?Vue4.x實(shí)現(xiàn)圖像標(biāo)點(diǎn)和質(zhì)量檢測(cè)功能,文章詳細(xì)描述了兩種方式,每種方式都包括前端顯示代碼、配置基本數(shù)據(jù)、繪制圓點(diǎn)和序號(hào)以及處理圖片點(diǎn)擊的步驟,需要的朋友可以參考下
    2024-11-11
  • 1分鐘Vue實(shí)現(xiàn)右鍵菜單

    1分鐘Vue實(shí)現(xiàn)右鍵菜單

    今天給大家分享的是,如何在最短的時(shí)候內(nèi)實(shí)現(xiàn)右鍵菜單。高效實(shí)現(xiàn)需求,避免重復(fù)造輪子。感興趣的可以了解一下
    2021-10-10
  • vue?實(shí)現(xiàn)列表跳轉(zhuǎn)至詳情且能添加至購(gòu)物車功能

    vue?實(shí)現(xiàn)列表跳轉(zhuǎn)至詳情且能添加至購(gòu)物車功能

    列表頁(yè)面顯示數(shù)據(jù),點(diǎn)擊跳轉(zhuǎn)到對(duì)應(yīng)的詳情頁(yè),詳情頁(yè)可以添加并跳轉(zhuǎn)到購(gòu)物車,購(gòu)物車具有常見(jiàn)功能,這篇文章主要介紹了vue?實(shí)現(xiàn)列表跳轉(zhuǎn)至詳情且能添加至購(gòu)物車,需要的朋友可以參考下
    2022-10-10
  • vue 插值 v-once,v-text, v-html詳解

    vue 插值 v-once,v-text, v-html詳解

    這篇文章主要介紹了vue 插值 v-once,v-text, v-html詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • vue+echarts實(shí)現(xiàn)中國(guó)地圖流動(dòng)效果(步驟詳解)

    vue+echarts實(shí)現(xiàn)中國(guó)地圖流動(dòng)效果(步驟詳解)

    這篇文章主要介紹了vue+echarts實(shí)現(xiàn)中國(guó)地圖流動(dòng)效果(步驟詳解),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • vue3+vite+vant4手機(jī)端項(xiàng)目實(shí)戰(zhàn)記錄

    vue3+vite+vant4手機(jī)端項(xiàng)目實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于vue3+vite+vant4手機(jī)端項(xiàng)目實(shí)戰(zhàn)的相關(guān)資料,Vue3是一種前端開(kāi)發(fā)框架,它的目標(biāo)是提供更好的性能和開(kāi)發(fā)體驗(yàn),需要的朋友可以參考下
    2023-08-08
  • vue+elementui實(shí)現(xiàn)表格多級(jí)表頭效果

    vue+elementui實(shí)現(xiàn)表格多級(jí)表頭效果

    這篇文章主要為大家詳細(xì)介紹了vue?+?elementui實(shí)現(xiàn)表格多級(jí)表頭,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue中如何動(dòng)態(tài)拼接this后面的變量

    vue中如何動(dòng)態(tài)拼接this后面的變量

    這篇文章主要介紹了vue中如何動(dòng)態(tài)拼接this后面的變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

南澳县| 湘阴县| 文昌市| 云南省| 柞水县| 东宁县| 施秉县| 藁城市| 鞍山市| 监利县| 宣恩县| 桓仁| 星子县| 南昌市| 滦平县| 西安市| 徐水县| 西青区| 商洛市| 台前县| 吉安市| 南投县| 桐柏县| 西丰县| 西华县| 克拉玛依市| 精河县| 镇雄县| 西藏| 济阳县| 甘洛县| 屯留县| 万安县| 明星| 吴旗县| 沈阳市| 勃利县| 蓝田县| 广西| 高州市| 平陆县|