Web全栈探索,Vue基础系列,常用特性(五)过滤器

一、过滤器的作用是什么

格式化数据,比如将字符串格式化为首字母大写,将日期格式化为指定的格式等

二、自定义过滤器

1.过滤器的定义

Vue.filter(‘过滤器名称’ , function(value){
    // 过滤器业务逻辑
    // value 参数代表被过滤器修饰的变量自身
})

2.过滤器的调用

<div>{{msg | upper}}</div>

<div>{{msg | upper | lower}}</div>

<div v-bind:id=“id | formatId"></div>

三、局部过滤器

filters:{
    过滤器名称: function(){
    }
}

五、带参数的过滤器

1.定义

Vue.filter(‘format’ , function(value, arg1){
    // value就是过滤器传递过来的参数
})

2.过滤器的调用

<div>{{date | format(‘yyyy-MM-dd')}}</div>

六、实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="app">
    <input type="text" v-model='msg' aria-label="">
    <!-- | 符号功能等同于 linux操作系统的管道符,即将上一轮操作的结果作为这次的输入,在 vue 中被称为级联-->
    <div>{{msg | upper}}</div>
    <div>{{msg | lower}}</div>
    <!--过滤器还可以用于属性绑定中-->
    <label v-bind:info='this.version | upper' style="background-color: darkgrey">2020版本</label>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    /*
      过滤器
      1、可以用与插值表达式和属性绑定
      2、支持级联操作
    */
    Vue.filter('upper', function(val) {
        // 方法一
        // charAt 可以拿到指定索引的字符
        // toUpperCase 可以将任意字符转为大写
        // slice 函数将从第 i 个下标开始到最后的字符截取
        return val.charAt(0).toUpperCase() + val.slice(1);
    });

    let vm = new Vue({
        el: '#app',
        data: {
            msg: '',
            version: 'version-1.1'
        },
        // 方法二
        // 将输入字符串的第一个字符变为小写
        filters: {
            lower: function(val) {
                return val.charAt(0).toLowerCase() + val.slice(1);
            }
        }
    });
</script>
</body>
</html>

七、日期格式化


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="app">
    <div>{{date | format('yyyy-MM-dd hh:mm:ss')}}</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    /*
      过滤器案例:格式化日期
      通用源码
    */
    Vue.filter('format', function(value, arg) {
        function dateFormat(date, format) {
            if (typeof date === "string") {
                let mts = date.match(/(\/Date\((\d+)\)\/)/);
                if (mts && mts.length >= 3) {
                    date = parseInt(mts[2]);
                }
            }
            date = new Date(date);
            if (!date || date.toUTCString() === "Invalid Date") {
                return "";
            }
            let map = {
                "M": date.getMonth() + 1, //月份
                "d": date.getDate(), //日
                "h": date.getHours(), //小时
                "m": date.getMinutes(), //分
                "s": date.getSeconds(), //秒
                "q": Math.floor((date.getMonth() + 3) / 3), //季度
                "S": date.getMilliseconds() //毫秒
            };

            format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
                let v = map[t];
                if (v !== undefined) {
                    if (all.length > 1) {
                        v = '0' + v;
                        v = v.substr(v.length - 2);
                    }
                    return v;
                } else if (t === 'y') {
                    return (date.getFullYear() + '').substr(4 - all.length);
                }
                return all;
            });
            return format;
        }
        return dateFormat(value, arg);
    })
    let vm = new Vue({
        el: '#app',
        data: {
            date: new Date()
        }
    });
</script>
</body>
</html>

 

posted @ 2020-07-18 22:48  IT蓝月  阅读(86)  评论(0编辑  收藏  举报
Live2D