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

基于element-ui封裝表單金額輸入框的方法示例

 更新時(shí)間:2021年01月06日 17:25:48   作者:Huup_We  
這篇文章主要介紹了基于element-ui封裝表單金額輸入框的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在日常的迭代開發(fā)中通常我們會遇到這樣的場景:在一個(gè)表單中需要用戶輸入金額,并校驗(yàn)金額的格式。這個(gè)需求你一定遇到過,但是現(xiàn)在,我們還需要做到:當(dāng)用戶離開輸入框(失去焦點(diǎn))時(shí),輸入的內(nèi)容變成了用逗號每隔 3 位分隔的數(shù)字,并展示給用戶。且最后提交金額時(shí),參數(shù)的值仍然是正常數(shù)字,不包含逗號。

遇到這種需求,我們首先要想到「表單中的金額輸入框」是常見到的功能。既然是常見的功能,我們要將它抽象封裝起來,做到隨時(shí)可用于任何表單中,用一行代碼代替重復(fù)作業(yè)。

像表單項(xiàng)一樣,我們需要給組件傳遞 label,綁定值的 keyplaceholder 用于展示在表單中;還需要傳遞整個(gè) form 對象,表單的 rules 進(jìn)來。另外,考慮到需要給一個(gè)遮罩層展示格式化后的金額,我們還需要傳遞 width 決定遮罩層寬度。

注意我們上面的需求,當(dāng) input 框觸發(fā) blur 事件時(shí),我們首先需要校驗(yàn)用戶輸入的內(nèi)容是否為正數(shù)且可保留兩位小數(shù)。這時(shí)就用到了傳遞進(jìn)來的 rules,拿它來校驗(yàn)。若通過校驗(yàn)則展開格式化后的金額,不通過就觸發(fā) element-ui 本身的校驗(yàn)規(guī)則提示。注意看 @blur 觸發(fā)的 blurInput 方法,用于去掉輸入內(nèi)容前面的 0,是否符合校驗(yàn)條件,最后決定是否展開格式化后的金額。

如果沒問題,通過了校驗(yàn),就需要根據(jù)輸入內(nèi)容格式化金額。利用 computed 計(jì)算得到。

組件的設(shè)計(jì)思想大致如下:

完整的組件代碼如下:

  },
  rules: {
   type: Object,
   default: () => { },
  },
 },
 data () {
  return {
   showFormatPrice: false, // 是否顯示遮罩
  }
 },
 computed: {
  formaterPrice () {
   if (
    this.form.deceivedAmount !== '' &&
    this.form.deceivedAmount !== null
   ) {
    // 去掉前面的0
    const integer = this.form.deceivedAmount.split('.')[0]
    const decimal = this.form.deceivedAmount.split('.')[1]
     ? `.${this.form.deceivedAmount.split('.')[1]}`
     : ''
    return `${integer
     .toString()
     .replace(/(?=(?!^)(\d{3})+$)/g, ',')}${decimal}`
   } else {
    return ''
   }
  },
 },
 methods: {
  // 聚焦金額輸入框
  focusInput () {
   this.showFormatPrice = false
   this.$refs.input.focus()
  },
  // 失焦金額輸入框
  blurInput () {
   if (this.form.deceivedAmount !== '') {
    // 去掉前面的0
    const integer = Number(this.form.deceivedAmount.split('.')[0])
    const decimal = this.form.deceivedAmount.split('.')[1]
     ? `.${this.form.deceivedAmount.split('.')[1]}`
     : ''
    this.form.deceivedAmount = isNaN(`${integer}${decimal}`)
     ? this.form.deceivedAmount
     : `${integer}${decimal}`
    if (typeof this.rules[this.prop][0].pattern !== 'object') {
     throw `請確保 rules[${this.prop}][0].pattern 為正則表達(dá)式`
     return
    }
    this.showFormatPrice = this.rules[this.prop][0].pattern.test(
     this.form.deceivedAmount,
    )
   }
  },
 },
}
</script>

<style lang="less" scoped>
.price-mask {
 position: absolute;
 z-index: 2;
 top: 1px;
 left: 125px;
 background: white;
 width: 110px;
 overflow: auto;
 font-size: 13px;
}
</style>

在表單中的使用方法其實(shí)和你直接寫一個(gè) el-form-item 的效果是一樣的,直接引入即可。

// 使用方法:
<template lang="pug">
el-form(:model="form" ref="form" label="180px" :label-suffix="':'" :rules="rules")
  priceInput(:form.sync = "form" :width = "150" label = "金額" prop = "deceivedAmount" :rules = "rules")
</template>

<script>
import priceInput from '@self/components/priceInput'
data() {
 return {
  form: {
   deceivedAmount: null,
  },
  rules: {
   deceivedAmount: [
    {
     pattern: /^1000000000$|^1000000000.0$|^1000000000.00$|^[+]{0,1}(\d{0,9})$|^[+]{0,1}(\d{0,9}\.\d{1,2})$/,
     message: ' 請輸入 0-10億 的正數(shù),可保留兩位小數(shù)',
     trigger: 'blur',
    },
   ],
  },
 }
}
components: {
 priceInput,
}
</script>

到此這篇關(guān)于基于element-ui封裝表單金額輸入框的方法示例的文章就介紹到這了,更多相關(guān)element-ui 表單金額輸入框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談vuex中store的命名空間

    淺談vuex中store的命名空間

    今天小編就為大家分享一篇淺談vuex中store的命名空間,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • element中el-select的使用及說明

    element中el-select的使用及說明

    這篇文章主要介紹了element中el-select的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue-cli3配置favicon.ico和title的流程

    vue-cli3配置favicon.ico和title的流程

    這篇文章主要介紹了vue-cli3配置favicon.ico和title的流程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue中子組件不能修改父組件傳來的Prop值的原因分析

    Vue中子組件不能修改父組件傳來的Prop值的原因分析

    在Vue中,父子組件之間通過Prop和Event實(shí)現(xiàn)了數(shù)據(jù)的雙向綁定,但是,Vue設(shè)計(jì)者為什么不允許子組件修改父組件傳遞的Prop呢,本文就來帶大家探究為什么子組件不能修改Prop,需要的朋友可以參考下
    2023-06-06
  • 聊聊Vue 中 title 的動態(tài)修改問題

    聊聊Vue 中 title 的動態(tài)修改問題

    這篇文章主要介紹了 Vue 中 title 的動態(tài)修改問題,文中通過兩種方案給大家介紹了title的傳遞問題 ,需要的朋友可以參考下
    2019-06-06
  • 使用Vue和ECharts創(chuàng)建交互式圖表的代碼示例

    使用Vue和ECharts創(chuàng)建交互式圖表的代碼示例

    在現(xiàn)代 Web 應(yīng)用中,數(shù)據(jù)可視化是一個(gè)重要的組成部分,它不僅能夠幫助用戶更好地理解復(fù)雜的數(shù)據(jù),還能提升用戶體驗(yàn),本文給大家使用Vue和ECharts創(chuàng)建交互式圖表的示例,需要的朋友可以參考下
    2024-11-11
  • vue點(diǎn)擊導(dǎo)航頁面實(shí)現(xiàn)自動滾動到特定位置

    vue點(diǎn)擊導(dǎo)航頁面實(shí)現(xiàn)自動滾動到特定位置

    這篇文章主要介紹了vue點(diǎn)擊導(dǎo)航頁面實(shí)現(xiàn)自動滾動到特定位置方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • element-plus 在vue3 中不生效的原因解決方法(element-plus引入)

    element-plus 在vue3 中不生效的原因解決方法(element-plus引入)

    這篇文章主要介紹了element-plus 在vue3 中不生效的原因解決方法(element-plus引入),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • element表格變化后自動刷新的兩種方案

    element表格變化后自動刷新的兩種方案

    本文主要介紹了element表格變化后自動刷新的兩種方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • vue使用@scroll監(jiān)聽滾動事件時(shí),@scroll無效問題的解決方法詳解

    vue使用@scroll監(jiān)聽滾動事件時(shí),@scroll無效問題的解決方法詳解

    這篇文章主要介紹了vue使用@scroll監(jiān)聽滾動事件時(shí),@scroll無效問題的解決方法,結(jié)合實(shí)例形式分析了@scroll監(jiān)聽滾動事件無效問題的原因及相應(yīng)的解決方法,需要的朋友可以參考下
    2019-10-10

最新評論

灵丘县| 长顺县| 额尔古纳市| 临清市| 黄平县| 襄垣县| 栾城县| 哈巴河县| 于都县| 巫溪县| 莫力| 温泉县| 河曲县| 塔城市| 大渡口区| 四川省| 诏安县| 定远县| 保定市| 临泽县| 武陟县| 赤峰市| 丽江市| 利川市| 呼和浩特市| 宁海县| 河曲县| 饶平县| 北辰区| 三门峡市| 侯马市| 通江县| 山东省| 双鸭山市| 日喀则市| 惠州市| 疏勒县| 晋江市| 清新县| 治多县| 黄梅县|