Vue2--计算属性/函数/过滤器/时间格式化

可以在{{}}中编写合法的JavaScript表达式,但是对于复杂逻辑,存在代码难懂不易理解的缺点。

计算属性

通过在Vue实例的computed中使用函数计算属性,并将函数的返回值赋值给变量值
注意点:
虽然在定义计算属性的时候是通过一个函数返回的数据,但是在使用计算属性的时候不能在计算属性名称后面加上(), 因为它是一个属性不是一个函数(方法)。

<body>
    <div id="app1">
        <p>{{messRev}}</p>
    </div>
    <script>
        let vue1 = new Vue({
            el:"#app1",
            data:{
                message:'abcedfg'
            },
            computed:{
                messRev:function () {
                    let res = this.message.split('').reverse().join('');
                    return res;
                }
            }
        })
    </script>
</body>

在这里插入图片描述

函数

通过函数也可以计算属性并将返回值赋值给变量值
函数"不会"将计算的结果缓存起来, 每一次访问都会重新求值
计算属性"会"将计算的结果缓存起来, 只要数据没有发生变化, 就不会重新求值
计算属性适应于变量值不会频繁变化的场景

<body>
    <div id="app1">
        <p>通过计算属性:{{mess1()}}</p>
        <p>通过函数:{{messRev}}</p>
    </div>
    <script>
        let vue1 = new Vue({
            el:"#app1",
            data:{
                message:'abcedfg'
            },
            methods:{
                mess1(){
                    let res = this.message.split('').reverse().join('');
                    return res;
                }
            },
            computed:{
                messRev:function () {
                    let res = this.message.split('').reverse().join('');
                    return res;
                }
            }
        })
    </script>
</body>

在这里插入图片描述

过滤器

专门用来格式化插入的文本数据
只能在插值语法和v-bind中使用,并且可以连续使用

自定义全局过滤器

定义全局过滤器的格式:Vue.filter(“过滤器名称”, 过滤器处理函数)
使用格式:{{msg | 过滤器名称 | 过滤器名称}} 或者 :value=“msg | 过滤器名称”

<body>
    <div id="app1">
        <p>{{name | formartStr1 | formartStr2}}</p>
    </div>
    <script>
        Vue.filter('formartStr1',function (value) {
            //传递的参数value既是要处理的数据
            value = value.replace(/学院/g,'大学');
            return value;
        });
        Vue.filter('formartStr2',function (value) {
            value = value.replace(/大学/g,'育儿园');
            return value;
        });
        let vue1 = new Vue({
            el:"#app1",
            data:{
                name: "知播渔学院, 指趣学院, 前端学院, 区块链学院"
            }
        })
    </script>
</body>

在这里插入图片描述

自定义局部过滤器

给创建Vue实例时传递的对象添加
filters: {
// key: 过滤器名称
// value: 过滤器处理函数
‘formartStr’: function (value) {}
}

<body>
    <div id="app2">
        <p>{{name | formartStr}}</p>
    </div>
    <script>
        Vue.filter('formartStr1',function (value) {
            //传递的参数value既是要处理的数据
            value = value.replace(/学院/g,'大学');
            return value;
        });
        Vue.filter('formartStr2',function (value) {
            value = value.replace(/大学/g,'育儿园');
            return value;
        });
        let vue2 = new Vue({
            el:"#app2",
            data:{
                name: "知播渔学院, 指趣学院, 前端学院, 区块链学院"
            },
            filters:{
                'formartStr':function(value){
                    value = value.replace(/学院/g,'大学');
                    return value;
                }
            }
        })
    </script>
</body>

在这里插入图片描述

时间格式化

字符串的padstart方法能将小于指定位数的字符串补全
先使用 +’ ’ 将获取到的月日时分秒转换成字符串,再使用padstart方法,当某一个时间是个位数时,在前面补0。

<body>
    <div id="app">
        <p>{{time | timeFormat}}</p>
    </div>
    <script>
        Vue.filter('timeFormat',function(value){
            let date = new Date(value);
            let year = date.getFullYear();
            let month = date.getMonth() + 1 +'';
            let day = date.getDate() +'';
            let hour = date.getHours() +'';
            let minute = date.getMinutes() +'';
            let second = date.getSeconds() +'';
            return `${year}-${month.padStart(2,'0')}-${day.padStart(2,'0')} ${hour.padStart(2,'0')}:${minute.padStart(2,'0')}:${second.padStart(2,'0')}`
        })
        let vue = new Vue({
            el:'#app',
            data:{
                time:Date.now()
            }
        });
    </script>
</body>

在这里插入图片描述

发布了119 篇原创文章 · 获赞 1 · 访问量 3951

猜你喜欢

转载自blog.csdn.net/weixin_42139212/article/details/103848297