vue中的过滤器filter

250 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

前言

vue.js为我们提供了强大的过滤器API,可以对数据进行各种过滤处理,返回我们想要的结果,过滤器又分别全局过滤器和局部过滤器,过滤器本质上是函数,所以过滤器中一定有返回值

过滤器的用法

过滤器的普通用法就是管道符号( | )作为分隔,管道符左边是要过滤的变量,右边是过滤器名称

<template>
  <div>
    <p>{{ time | dataFormat}}</p>
  </div>
</template>

还有串联用法,先用过滤器dataFormat1过滤一遍time,再用过滤器dataFormat2进行第二次过滤的结果,为最终结果

<template>
  <div>
    <p>{{ time | dataFormat1 | dataFormat2}}</p>
  </div>
</template>

局部过滤器

当我们需要将时间戳使用过滤器过滤,转为时间该怎么使用局部过滤器呢?

data() {
    return {
        time:1671594597
    };
},

首先在组件里定义局部过滤器filters,在里面定义一个函数,函数的名字就是过滤器的名字,函数的参数就是要过滤的原数据和参数,函数里写过滤的功能最后return过滤的结果

filters:{ //定义局部过滤器
    dataFormat(time){ //过滤器名字和要过滤的参数
        //过滤操作
        return  //返回过滤结果
    }
},

然后就可以试着使用过滤器将时间戳转为对应的时间了,也是成功的将时间戳过滤为时间了

filters:{
    dataFormat(time){
        const dt=new Date(time*1000)
        const y=dt.getFullYear()
        const m=(dt.getMonth()+1 + '').padStart(2,'0')
        const d=(dt.getDay()+'').padStart(2,'0')
        const hh=(dt.getHours()+'').padStart(2,'0')
        const mm=(dt.getMinutes()+'').padStart(2,'0')
        const ss=(dt.getSeconds()+'').padStart(2,'0')
        return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    }
},

图片.png

全局过滤器

全局定义过滤器在main.js使用Vue.filter()定义,接收两个参数,一个是全库过滤器的名字,另一个是要过滤的参数

Vue.filter('dataFormat',function(time){
  const dt=new Date(time*1000)
  const y=dt.getFullYear()
  const m=(dt.getMonth()+1 + '').padStart(2,'0')
  const d=(dt.getDay()+'').padStart(2,'0')
  const hh=(dt.getHours()+'').padStart(2,'0')
  const mm=(dt.getMinutes()+'').padStart(2,'0')
  const ss=(dt.getSeconds()+'').padStart(2,'0')
  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})

也是看到使用全局过滤器也是成功的将时间戳过滤为时间了