• Vue封装常用指令Directive


    需求 只能输入数字
    输入字母和特殊字符自动过滤掉
    输入完成失焦自动加.00 如果输入了小数自动四舍五入为22.22类似这样格式

    let number = {
        twoWay: true,
            bind:function (el) {
        el.addEventListener('blur',function () {
            // let value = formatNumber(el.value,2,0)
            let value
    
            (function(){
                value = formatNumber(el.value,2,0)
                return value
            })()
            el.value =value
        })
    },
        update:function (el,binding,vnode) {
            if(el.value !== ''){
                el.value = el.value.replace(/[^0-9.]+/g, '');
            }
        }
    }
    
    /**
     * 将数值四舍五入后格式化.
     * @param num 数值(Number或者String)
     * @param cent 要保留的小数位(Number)
     * @param isThousand 是否需要千分位 0:不需要,1:需要(数值类型);
     * @return 格式的字符串,如'1,234,567.45'
     * @type String
     */
    
    function formatNumber(num,cent,isThousand) {
        num = num.toString().replace(/$|\,/g,'');
    
        // 检查传入数值为数值类型
        if(isNaN(num))
            num = "0";
    
        // 获取符号(正/负数)
        let sign = (num == (num = Math.abs(num)));
    
        num = Math.floor(num*Math.pow(10,cent)+0.50000000001);  // 把指定的小数位先转换成整数.多余的小数位四舍五入
        let cents = num%Math.pow(10,cent);              // 求出小数位数值
        num = Math.floor(num/Math.pow(10,cent)).toString();   // 求出整数位数值
        cents = cents.toString();               // 把小数位转换成字符串,以便求小数位长度
    
        // 补足小数位到指定的位数
        while(cents.length<cent)
            cents = "0" + cents;
    
        if(isThousand) {
            // 对整数部分进行千分位格式化.
            for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
                num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
        }
    
        if (cent > 0)
            return (((sign)?'':'-') + num + '.' + cents);
        else
            return (((sign)?'':'-') + num);
    }
    export {
        number
    }
    

    用法

    import {number} from './numberDirective'
    
    import Vue from 'vue'
    
    Vue.directive('numbers',number)
    

      

  • 相关阅读:
    做事要趁早
    软件企业利润率知多少
    项目管理经验谈之意外事件处理
    App中调用iPhone的home + 电源键截屏功能
    WCF学习(一)
    10月博客学习一览
    设计模式之工厂模式读后感
    请教各位大鸟(关于附件上传)
    刚来的兄弟,一起扬帆起航吧
    巧用asp导出csv格式excel报表
  • 原文地址:https://www.cnblogs.com/Abner5/p/7568807.html
Copyright © 2020-2023  润新知