常用vue指令

14 篇文章 0 订阅
import Vue from 'vue'
import './directive.dialogdrag.js'

// 去空格
const validform = {

  filterSpace: Vue.directive('filterSpace', {
    update: function (el, {
      value,
      modifiers
    }, vnode) {
      try {
        value = value + ''
        let newval = value.replace(/\s*/g, '')
        if (value !== newval) {
          el.children[0].value = newval
          el.children[0].dispatchEvent(new Event(modifiers.lazy ? 'change' : 'input'))
        }
      } catch (e) {
        console.log(e)
      }
    }
  }),
  // 仅数字
  limitNumber: Vue.directive('limitNumber', {
    update: function (el, {
      value,
      modifiers
    }, vnode) {
      try {
        if (typeof value === 'number') return
        value = value || ''
        let newval = value.replace(/\D/g, '')
        if (value !== newval) {
          el.children[0].value = newval
          el.children[0].dispatchEvent(new Event(modifiers.lazy ? 'change' : 'input'))
        }
      } catch (e) {
        console.log(e)
      }
    }
  }),
  // 仅非负数字
  // 仅最多两位小数
  limitFixedNumber: Vue.directive('limitFixedNumber', {
    update: function (el, {
      value,
      modifiers
    }, vnode) {
      try {
        value = value || ''
        let newval = value == '.' ? '' : typeof (value) == 'string' ? value : value.toString()
        newval = newval.replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
        newval = newval.replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
        newval = newval.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
        newval = newval.replace(/^(-)*(\d+)\.(\d\d).*$/, '$1$2.$3')// 只能输入两个小数

        if (newval.indexOf('.') < 0 && newval != '') { // 以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
          newval = parseFloat(newval)
        }

        if (value !== newval) {
          el.children[0].value = Number(newval)
          el.children[0].dispatchEvent(new Event(modifiers.lazy ? 'change' : 'input'))
        }
      } catch (e) {
        console.log(e)
      }
    }
  }),
  // 过滤特殊字符
  limitSpecial: Vue.directive('limitSpecial', {
    update: function (el, {
      value,
      modifiers
    }, vnode) {
      try {
        value = value.toString()
        let pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥%《》\"+——=……&*()&;—|{}【】‘;:”“'。,、?]|[\u4e00-\u9fa5]", 'g')
        let newValue = value.replace(pattern, '')
        if (value !== newValue) {
          el.children[0].value = newValue
          el.children[0].dispatchEvent(new Event(modifiers.lazy ? 'change' : 'input'))
        }
      } catch (e) {
        console.log(e)
      }
    }
  }),
  // 倒计时
  timer: Vue.directive('timer', {
    bind: function (el, binding) {
      console.log(el)
      let t
      el.addEventListener('click', function () {
        if (el.dataset.validate === 'true') return
        let s = binding.arg
          ? binding.arg
          : 60
        const oldText = el.innerText
        el.disabled = true
        // el.innerText = oldText + "(" + s + "S)"
        el.innerText = s + 'S'
        t = setInterval(function (params) {
          if (s === 1) {
            if (binding.value && typeof (binding.value) === 'function') {
              binding.value()
            }
            el.innerText = oldText
            el.disabled = false
            clearInterval(t)
            return
          }
          s--
          // el.innerText = oldText + "(" + s + "S)"
          el.innerText = s + 'S'
        }, 1000)
      })
    }
  })
  

  // 仅手机号
  limitPhone: Vue.directive('limitPhone', {
    update: function (el, {
      value,
      modifiers
    }, vnode) {
      try {
        // let reg_tel = /^1\d{10}$/
        let newval = value ? value.replace(/\D/g, '') : ''
        newval = newval.replace(/[^\d]/g, '') // 清除“数字”和“.”以外的字符

        if (newval.length == 1 && newval != 1) {
          newval = ''
        }
        newval = newval.length > 11 ? newval.slice(0, 11) : newval
        console.log('newval :>> ', newval)
        if (value !== newval) {
          el.children[0].value = newval
          el.children[0].dispatchEvent(new Event(modifiers.lazy ? 'change' : 'input'))
        }
      } catch (e) {
        console.log(e)
      }
    }
  })}

export default validform

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值