欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

先看個(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'}
    ]
   },
  }
 }
}

遇到的坑

在組件中【開始寫的時(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并沒有傳過來,為undefined

解決:

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

補(bǔ)充知識(shí):用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)聽,動(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è)頁面多個(gè)數(shù)據(jù)多個(gè)處理,因?yàn)閡pdate鉤子是頁面上的任意改動(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的使用

    深入理解vue的使用

    這篇文章主要介紹了深入理解vue的使用,對(duì)vue感興趣的同學(xué),可以參考下
    2021-05-05
  • vue2.0s中eventBus實(shí)現(xiàn)兄弟組件通信的示例代碼

    vue2.0s中eventBus實(shí)現(xiàn)兄弟組件通信的示例代碼

    這篇文章主要介紹了vue2.0s中eventBus實(shí)現(xiàn)兄弟組件通信的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Vue路由配置方法詳細(xì)介紹

    Vue路由配置方法詳細(xì)介紹

    Vue3和Vue2基本差不多,只不過需要將createRouter、createWebHistory從vue-router中引入,再進(jìn)行使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Vue使用el-table實(shí)現(xiàn)自適應(yīng)列寬

    Vue使用el-table實(shí)現(xiàn)自適應(yīng)列寬

    這篇文章主要為大家詳細(xì)介紹了Vue使用el-table實(shí)現(xiàn)自適應(yīng)列寬,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Vue2和Vue3的nextTick實(shí)現(xiàn)原理

    Vue2和Vue3的nextTick實(shí)現(xiàn)原理

    Vue 中的數(shù)據(jù)綁定和模板渲染都是異步的,那么如何在更新完成后執(zhí)行回調(diào)函數(shù)呢?這就需要用到 Vue 的 nextTick 方法了,本文詳細(xì)介紹了Vue2和Vue3的nextTick實(shí)現(xiàn)原理,感興趣的同學(xué)可以參考一下
    2023-04-04
  • vue與iframe之間的交互方式(一看就會(huì))

    vue與iframe之間的交互方式(一看就會(huì))

    這篇文章主要介紹了vue與iframe之間的交互方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue組件系列開發(fā)之模態(tài)框

    Vue組件系列開發(fā)之模態(tài)框

    這篇文章主要介紹了Vue組件系列開發(fā)之模態(tài)框,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • vue uniapp實(shí)現(xiàn)分段器效果

    vue uniapp實(shí)現(xiàn)分段器效果

    這篇文章主要為大家詳細(xì)介紹了vue uniapp實(shí)現(xiàn)分段器效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 使用vue封裝一個(gè)自定義樣式的滾動(dòng)條

    使用vue封裝一個(gè)自定義樣式的滾動(dòng)條

    眾所周知,當(dāng)容器高度固定而內(nèi)容部分高度超出容器高度時(shí),瀏覽器會(huì)渲染出一個(gè)可以滾動(dòng)并用于顯示剩余界面的條 -- 滾動(dòng)條,它可以簡(jiǎn)單的樣式修改,但是位置是固定的,無法移動(dòng),而我們需要改變位置的時(shí)候,它就不能滿足我們的需求了,這時(shí)我們可以自己手寫一個(gè)
    2023-10-10
  • 詳解如何將 Vue-cli 改造成支持多頁面的 history 模式

    詳解如何將 Vue-cli 改造成支持多頁面的 history 模式

    本篇文章主要介紹了詳解如何將 Vue-cli 改造成支持多頁面的 history 模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論