vue中过滤器的使用

注册过滤器:

Vue.filter(name,callback) 或 new Vue({ filter:{...} })

使用过滤器:

{ {xxx | 过滤器名}}  或 v-bind:属性 = "xxx | 过滤器名"

一、用法

1、插值语法(局部过滤器)

使用管道符 | 进行分割,直接使用data中的数值,管道符后再接过滤器进行操作

{ {time | setTime}}time是传入的时间参数setTime过滤器的名字,它会将time作为参数val传入到过滤器setTime(val)中,最后将return结果替换掉整个插值语法;

默认有一个参数:

<h3>过滤器实现:{
   
   {time | FormatTime3}}</h3>
new Vue({
        el:'#root',
        data:{
            time:Date.now(),
            temp:"12345"
        },
        filters:{
            FormatTime3(value){
                 return dayjs(value).format('YYYY-MM-DD HH-mm-ss')
            }
        }
})

也可以手动设置参数:

当调用的时候传入了参数,第一个参数value还是管道符|前面的time第二个参数才是传入的参数'YYYY-MM-DD'

这里给第二个参数str设置了默认参数,因为还要满足不传参的情况(按照原来的格式显示时间)

new Vue({
        el:'#root',
        data:{
            time:Date.now(),
            temp:"12345"
        },
        //注意:在这里定义的都是局部过滤器
        filters:{
            //当调用的时候传入了参数,第一个参数value还是管道符|前面的time,第二个参数才是传入的参数'YYYY-MM-DD'
            //注意:这里给第二个参数str设置了默认参数,因为还要满足不传参的情况(按照原来的格式显示时间)
            FormatTime3(value,str='YYYY-MM-DD HH-mm-ss'){
                return dayjs(value).format(str)
            }
            
        }
    })

多个过滤器的串联:

如果在管道符后面还定义了另一个过滤器,那就把前面的过滤器return的结果作为后面过滤器的参数传入,最后一个过滤器的结果再替换掉整个插值语法的值

例:{ {time | FormatTime3('YYYY-MM-DD') | MySlice}}

2、插值语法(全局过滤器)

<script>
    //全局过滤器
    Vue.filter('MySlice',function(value){
         return value.slice(0,4);
    })
    
    new Vue({ ... })
</script>

3、

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <script src="../js/dayjs.js"></script>
</head>
<body>
    <div id="root">
        <h2>显示格式化之后的时间</h2><br>


        <h3>计算属性实现:{
   
   {formatTime}}</h3>

        <h3>methods实现:{
   
   {formatTime2()}}</h3>

        <h3>过滤器实现:{
   
   {time | FormatTime3}}</h3>

        <h3>过滤器传参实现:{
   
   {time | FormatTime3('YYYY-MM-DD')}}</h3>

        <!-- 当存在多个管道符时,会层层调用,前面的作为后面的参数进行调用 -->
        <h3>过滤器能够实现截取效果:{
   
   {time | FormatTime3('YYYY-MM-DD') | MySlice}}</h3>

        <!-- 过滤器不仅可以用在插值语法,还可以用在v-bind,不能用在v-model -->
        <h3 :temp="temp | MySlice">尚硅谷</h3>

    </div>
</body>
<script>
    //全局过滤器
    // Vue.filter('MySlice',function(value){
    //     return value.slice(0,4);
    // })

    new Vue({
        el:'#root',
        data:{
            time:Date.now(),
            temp:"12345"
        },
        computed:{
            formatTime(){
                return dayjs(this.time).format('YYYY-MM-DD HH-mm-ss')
            }
        },
        methods: {
            formatTime2(){
                return dayjs(this.time).format('YYYY-MM-DD HH-mm-ss')
            }
        },
        //注意:在这里定义的都是局部过滤器
        filters:{
            //参数value传入的值就是管道符|前面的time
            // FormatTime3(value){
            //     return dayjs(value).format('YYYY-MM-DD HH-mm-ss')
            // }

            //当调用的时候传入了参数,第一个参数value还是管道符|前面的time,第二个参数才是传入的参数'YYYY-MM-DD'
            //注意:这里给第二个参数str设置了默认参数,因为还要满足不传参的情况(按照原来的格式显示时间)
            FormatTime3(value,str='YYYY-MM-DD HH-mm-ss'){
                return dayjs(value).format(str)
            },
            // 参数为FormatTime3的返回值
            MySlice(value){
                return value.slice(0,4);
            }
        }
    })
</script>

</html>

猜你喜欢

转载自blog.csdn.net/weixin_46376652/article/details/125694832