Vue2入门之超详细教程十六-过滤器

Vue2入门之超详细教程十六-过滤器

1、简介

过滤器

  • 定义:对要显示的数据进行特点格式化后再显示(适用于一些简单逻辑的处理)
  • 语法:
    • 1.注册过滤器:Vue.filter(name,callback)或 new Vue(filters:{})
    • 2.使用过滤器:{{ xxx | 郭琪琪名}} 或 v-bind:属性 = "xxx | 过滤器名称"
  • 备注:
    • 1.过滤器也可以接收额外参数、多个过滤器也可以串联
    • 并没有改变原本的数据,是产生新的对应的数据

学习Vue之前最后会一些HTML和CSS的基础知识,HTML基础知识 传送门,CSS基础知识 传送门

2、过滤器

1. 不传参数过滤器

实现一个时间戳转换过滤器

<h3>过滤器不传参实现:{{time | timeFormater}}</h3>
data(){
    return {
        time:Date.now(),
        msg:'你好,博客园'
    }
},
// 局部过滤器
filters:{
    timeFormater(value){
        return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
    }
}

当插值语法解析time前,会先把time传给timeFormater,timeFormater默认接收time作为value,对time进行格式化后展示

2.传参数过滤器

上面的过滤有一些小问题,就是时间格式是固定的,当我们想要别的格式时,还需要改源码,实在不方便,我们来修改一下

<h3>过滤器传参实现:{{time | timeFormater('YYYY-MM-DD HH:mm:ss')}}</h3>
data(){
    return {
        time:Date.now(),
        msg:'你好,博客园'
    }
},
// 局部过滤器
filters:{
    timeFormater(value,format='YYYY年MM月DD日 HH:mm:ss'){
        return dayjs(value).format(format)
    }
}

调用timeFormater时我们传入了自定义的格式,过滤器第一个参数默认是被过滤的数据,第二个参数才是我们传入的内容

3.多组过滤器

<h3>多个过滤器:{{time | timeFormater |mySlice}}</h3>
data(){
    return {
        time:Date.now(),
        msg:'你好,博客园'
    }
},// 局部过滤器
filters:{
    timeFormater(value,format='YYYY年MM月DD日 HH:mm:ss'){
        return dayjs(value).format(format)
    },
    mySlice(value){
        return value.slice(0,4)
    }
}

timeFormater格式化时间戳,mySlice切片只显示前4位数字

4.v-bind使用过滤器

<h3 :x="msg | mySlice">博客园</h3>
data(){
    return {
        time:Date.now(),
        msg:'你好,博客园'
    }
},
// 局部过滤器
filters:{
    mySlice(value){
        return value.slice(0,4)
    }
}

image-20240106231406538

3、完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="../js/development/vue.js"></script>
    <script type="text/javascript" src="../js/development/dayjs.min.js"></script>
</head>
<body>
    <div id="root">
        <h2>显示格式化后的时间</h2>
        <h3>computed实现:{{fmtTime}}</h3>
        <h3>methods实现:{{ getFmtTime() }}</h3>
        <h3>过滤器不传参实现:{{time | timeFormater}}</h3>
        <h3>过滤器传参实现:{{time | timeFormater('YYYY-MM-DD HH:mm:ss')}}</h3>
        <h3>多个过滤器:{{time | timeFormater |mySlice}}</h3>
        <h3 :x="msg | mySlice">博客园</h3>
    </div>
</body>
<script type="text/javascript">
    // 全局过滤器
    Vue.filter('mySlice',function(value){
        return value.slice(0,4)
    })
    new Vue({
        el:'#root',
        data(){
            return {
                time:Date.now(),
                msg:'你好,博客园'
            }
        },
        computed:{
            fmtTime(){
                return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')
            }
        },
        methods:{
            getFmtTime(){
                return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')
            }
        },
        // 局部过滤器
        filters:{
            timeFormater(value,format='YYYY年MM月DD日 HH:mm:ss'){
                return dayjs(value).format(format)
            },
            mySlice(value){
                return value.slice(0,4)
            }
        }
    })
</script>
</html>

4、过程中遇到的错误及解决办法

以上代码中我们使用了另一个第三方库中的方法即dayjs()在使用它前我们需要先引入一下它

两种方式引入:

1.直接引入

<script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.9/dayjs.min.js"></script>

2.本地引入

本地引入需要先下载到本地

在浏览器中访问:https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.9/dayjs.min.js

然后点击数遍右键,选择另存为

image-20240106231823187

存到本地后,在进行引入

<script type="text/javascript" src="../js/development/dayjs.min.js"></script>
posted @ 2024-01-25 10:53  李荣洋  阅读(145)  评论(0编辑  收藏  举报