Vue过滤器

vue.js允许自定义过滤器,可被用于一些常见的文本格式化
功能:对要显示的数据进行特定格式化后再显示
需求:有一个日期对象,想按照年月日的方式展示
以前的代码需要自己先获取年月日,然后进行拼接,我们利用计算属性来做,如下所示:
    <div id="app">
        <p> 当前日期:{{date}}</p>
        <p > 格式化加入计算属性{{stringfyData}}</p>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        let vm = new Vue({
            el : "#app",
            data : {
                date : new Date(),
            },
            computed:{
                stringfyData() {
                    let year = this.date.getFullYear();
                    let month = this.date.getMonth();
                    let day = this.date.getDate();
                    return year + '' + month + '' + day + '';
                }
            }
        })
    </script>

 这种方式存在的缺点是不够灵活,如果要多重时间的格式,使用计算属性不太妥当。

此时可以使用过滤器函数,过滤器是一个函数,在vue配置项中定义,可以定义形参。

先回顾一下已经学过的配置项

el : 定义需要管理的挂载点

data:定义数据项

methods:定义函数

watch 定义监听器
computed 定义计算属性
filters 定义过滤器
局部过滤器定义语法如下:
                filters :{
                    //第一个参数value必须有,表示传递过来需要过滤的数据,其默认是你调用的时候,插值表达式中的值
                    //后面定义n个参数
                    filterName:function(value,[param...]){
                        return 对value过滤后的数据
                    }
                }

全局过滤器定义语法如下:

                可以在所有地方使用
                Vue.filter(filterName,function(value[param....]){
                    return 对value过滤后的数据
                })
注意:局部过滤器和全局过滤器重名,那么需要用局部过滤器
调用方法如下:
{{要过滤的数据名 | 过滤器名字}}
{{要过滤的数据名 | 过滤器名字(arg)}}

示例-----

定义全局过滤器,用来把数据的首字母切换为大写,比如:java->Java
<div id="app">
        <p> 当前日期:{{date}}</p>
        <p > 格式化加入计算属性{{stringfyData}}</p>
        <!-- 原名称 -->
        <p>{{name}}</p>
        <!-- 过滤后的名称 -->
        <p>{{name | capltalize}}</p>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        //定义全局过滤器,用来把数据的首字母切换为大写,比如:java->Java
        Vue.filter('capltalize', function(value){//回调函数的第一个参数肯定是要过滤的数据
            //如果value为null, undefined,''都转为false
            if (!value) {
                return '';
            }
            value = value.toString();
            return value.charAt(0).toUpperCase() + value.substr(1);
        })
        let vm = new Vue({
            el : "#app",
            data : {
                date : new Date(),
                name : 'jake'
            },
            computed:{
                // 计算属性虽然定义的方式是函数,但是计算属性是vue实例的属性,直接按照data进行调用的
                stringfyData() {
                    let year = this.date.getFullYear();
                    let month = this.date.getMonth();
                    let day = this.date.getDate();
                    return year + '' + month + '' + day + '';
                }
            }
        })
    </script>

 需求:使用局部过滤器将所有的java(不区分大小写),更改为JavaScript

  代码如下:

        <p>原message{{msg}}</p>
        <p>过滤后的message</p>
        <p>{{msg | msgfRormat1}}</p>
            filters: {
                msgfRormat1(value) {
                    //JS里面的replace方法,只会替换第一个,我们可以使用正则表达式来进行
                    return value.replace(/java/ig,'JavaScript');
                }
            }

当然,还可以传参数,秩序进行如下修改就行可以,

        <p>原message{{msg}}</p>
        <p>过滤后的message</p>
        <p>{{msg | msgfRormat1('vue.js')}}</p>
            filters: {
                msgfRormat1(value,param = 'JavaScript') {
                    //JS里面的replace方法,只会替换第一个
                    return value.replace(/java/ig,param);
                }
            }

Moment.js这个时间工具可以

在 JavaScript 中解析、校验、操作、显示日期和时间。

用法链接如下:https://momentjs.cn/

 

 

posted @ 2024-08-19 16:42  洛飞  阅读(5)  评论(0编辑  收藏  举报