zoukankan      html  css  js  c++  java
  • vue-cli工作中如何自定义一个过滤器?

    文件结构:


    .
    ├── src
    │   ├── filter
    │   │    ├── filter.js
    │   │    
    │   └── main.js
    └── ...
    

    过滤器们放在filter文件夹下


    filter/filter.js:


    这个文件主要是写了过滤器实现的方法,然后export进行导出。

    function filterOne(n){
        return n + 10;
    }
    function filterTwo(n){
        return n + 5;
    }
    export{
        filterOne,
        filterTwo
    }
    

    main.js:


    // 找 filter/filter.js
    import * as filters from './filter/filter.js'
    //遍历所有导出的过滤器并添加到全局过滤器
    Object.keys(filters).forEach((key) => {
      Vue.filter(key, filters[key]);
    })
    

    在 .vue 组件下使用


    {{test | filterOne}}
    

    问题二:vue-cli工作中常用的过滤器

    在 .vue 组件中的使用示例:

    {{ string | trim(1) }} //去除所有空格,过滤器第一个参数为value
    

    常用的过滤器,filter/filter.js

    //去除空格  type 1-所有空格  2-前后空格  3-前空格 4-后空格
    function trim(value, trim) {
        switch (trim) {
            case 1:
                return value.replace(/s+/g, "");
            case 2:
                return value.replace(/(^s*)|(s*$)/g, "");
            case 3:
                return value.replace(/(^s*)/g, "");
            case 4:
                return value.replace(/(s*$)/g, "");
            default:
                return value;
        }
    }
    //任意格式日期处理
    //使用格式:
    // {{ '2018-09-14 01:05' | formaDate(yyyy-MM-dd hh:mm:ss) }} 
    // {{ '2018-09-14 01:05' | formaDate(yyyy-MM-dd) }} 
    // {{ '2018-09-14 01:05' | formaDate(MM/dd) }} 等
    function formaDate(value, fmt) {
        var date = new Date(value);
        var o = {
          "M+": date.getMonth() + 1, //月份
          "d+": date.getDate(), //日
          "h+": date.getHours(), //小时
          "m+": date.getMinutes(), //分
          "s+": date.getSeconds(), //秒
          "w+": date.getDay(), //星期
          "q+": Math.floor((date.getMonth() + 3) / 3), //季度
          "S": date.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o) {
          if(k === 'w+') {
            if(o[k] === 0) {
              fmt = fmt.replace('w', '周日');
            }else if(o[k] === 1) {
              fmt = fmt.replace('w', '周一');
            }else if(o[k] === 2) {
              fmt = fmt.replace('w', '周二');
            }else if(o[k] === 3) {
              fmt = fmt.replace('w', '周三');
            }else if(o[k] === 4) {
              fmt = fmt.replace('w', '周四');
            }else if(o[k] === 5) {
              fmt = fmt.replace('w', '周五');
            }else if(o[k] === 6) {
              fmt = fmt.replace('w', '周六');
            }
          }else if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
          }
        }
        return fmt;
      }
    //字母大小写切换
    /*type
     1:首字母大写
     2:首页母小写
     3:大小写转换
     4:全部大写
     5:全部小写
     * */
    function changeCase(str, type) {
        function ToggleCase(str) {
            var itemText = ""
            str.split("").forEach(
                function (item) {
                    if (/^([a-z]+)/.test(item)) {
                        itemText += item.toUpperCase();
                    } else if (/^([A-Z]+)/.test(item)) {
                        itemText += item.toLowerCase();
                    } else {
                        itemText += item;
                    }
                });
            return itemText;
        }
        switch (type) {
            case 1:
                return str.replace(/w+/g, function (word) {
                    return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
                });
            case 2:
                return str.replace(/w+/g, function (word) {
                    return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
                });
            case 3:
                return ToggleCase(str);
            case 4:
                return str.toUpperCase();
            case 5:
                return str.toLowerCase();
            default:
                return str;
        }
    }
    
    //字符串循环复制,count->次数
    function repeatStr(str, count) {
        var text = '';
        for (var i = 0; i < count; i++) {
            text += str;
        }
        return text;
    }
    
    //字符串替换
    function replaceAll(str, AFindText, ARepText) {
        raRegExp = new RegExp(AFindText, "g");
        return str.replace(raRegExp, ARepText);
    }
    
    //字符替换*,隐藏手机号或者身份证号等
    //replaceStr(字符串,字符格式, 替换方式,替换的字符(默认*))
    //ecDo.replaceStr('18819322663',[3,5,3],0)
    //result:188*****663
    //ecDo.replaceStr('asdasdasdaa',[3,5,3],1)
    //result:***asdas***
    //ecDo.replaceStr('1asd88465asdwqe3',[5],0)
    //result:*****8465asdwqe3
    //ecDo.replaceStr('1asd88465asdwqe3',[5],1,'+')
    //result:"1asd88465as+++++"
    
    function replaceStr(str, regArr, type, ARepText) {
        var regtext = '',
            Reg = null,
            replaceText = ARepText || '*';
        //repeatStr是在上面定义过的(字符串循环复制),大家注意哦
        if (regArr.length === 3 && type === 0) {
            regtext = '(\w{' + regArr[0] + '})\w{' + regArr[1] + '}(\w{' + regArr[2] + '})'
            Reg = new RegExp(regtext);
            var replaceCount = this.repeatStr(replaceText, regArr[1]);
            return str.replace(Reg, '$1' + replaceCount + '$2')
        }
        else if (regArr.length === 3 && type === 1) {
            regtext = '\w{' + regArr[0] + '}(\w{' + regArr[1] + '})\w{' + regArr[2] + '}'
            Reg = new RegExp(regtext);
            var replaceCount1 = this.repeatStr(replaceText, regArr[0]);
            var replaceCount2 = this.repeatStr(replaceText, regArr[2]);
            return str.replace(Reg, replaceCount1 + '$1' + replaceCount2)
        }
        else if (regArr.length === 1 && type === 0) {
            regtext = '(^\w{' + regArr[0] + '})'
            Reg = new RegExp(regtext);
            var replaceCount = this.repeatStr(replaceText, regArr[0]);
            return str.replace(Reg, replaceCount)
        }
        else if (regArr.length === 1 && type === 1) {
            regtext = '(\w{' + regArr[0] + '}$)'
            Reg = new RegExp(regtext);
            var replaceCount = this.repeatStr(replaceText, regArr[0]);
            return str.replace(Reg, replaceCount)
        }
    }
    
    //格式化处理字符串
    //ecDo.formatText('1234asda567asd890')
    //result:"12,34a,sda,567,asd,890"
    //ecDo.formatText('1234asda567asd890',4,' ')
    //result:"1 234a sda5 67as d890"
    //ecDo.formatText('1234asda567asd890',4,'-')
    //result:"1-234a-sda5-67as-d890"
    function formatText(str, size, delimiter) {
        var _size = size || 3, _delimiter = delimiter || ',';
        var regText = '\B(?=(\w{' + _size + '})+(?!\w))';
        var reg = new RegExp(regText, 'g');
        return str.replace(reg, _delimiter);
    }
    
    //现金额大写转换函数
    //ecDo.upDigit(168752632)
    //result:"人民币壹亿陆仟捌佰柒拾伍万贰仟陆佰叁拾贰元整"
    //ecDo.upDigit(1682)
    //result:"人民币壹仟陆佰捌拾贰元整"
    //ecDo.upDigit(-1693)
    //result:"欠人民币壹仟陆佰玖拾叁元整"
    function upDigit(n) {
        var fraction = ['角', '分', '厘'];
        var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
        var unit = [
            ['元', '万', '亿'],
            ['', '拾', '佰', '仟']
        ];
        var head = n < 0 ? '欠人民币' : '人民币';
        n = Math.abs(n);
        var s = '';
        for (var i = 0; i < fraction.length; i++) {
            s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        }
        s = s || '整';
        n = Math.floor(n);
        for (var i = 0; i < unit[0].length && n > 0; i++) {
            var p = '';
            for (var j = 0; j < unit[1].length && n > 0; j++) {
                p = digit[n % 10] + unit[1][j] + p;
                n = Math.floor(n / 10);
            }
            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
            //s = p + unit[0][i] + s;
        }
        return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
    } 
    
    //保留2位小数
    function toDecimal2(x){
      var f = parseFloat(x);
      if (isNaN(f)) {
        return false;
      }
      var f = Math.round(x * 100) / 100;
      var s = f.toString();
      var rs = s.indexOf('.');
      if (rs < 0) {
        rs = s.length;
        s += '.';
      }
      while (s.length <= rs + 2) {
        s += '0';
      }
      return s;
    }
    
    export{
    	trim,
        changeCase,
        repeatStr,
        replaceAll,
        replaceStr,
        checkPwd,
        formatText,
        upDigit,
        toDecimal2,
        formaDate
    }
  • 相关阅读:
    Android中setContentView与inflate的区别
    Android RelativeLayout(相对布局)
    web移动开发最佳实践之js篇(转)
    SQL Server全文索引 (简单的搜索引擎)
    浅谈SQL Server中的三种物理连接操作 (转)
    sql server 优化顾问学习(转)
    IIS优化网站性能(转)
    js,css文件压缩
    SQL Server Profiler学习
    有效提高命中率的缓存设计
  • 原文地址:https://www.cnblogs.com/restart77/p/13376867.html
Copyright © 2011-2022 走看看