使用方式:

<!-- 在双花括号中 -->
{{ message | formatDate }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatDate"></div>

那么,我们该如何去写过滤器呢?接下来我们假定一种场景,后端返回的一个 时间列表大概是长下边这样的:

[
    {time: 1533527037000},
    {time: 1533527037000},
    {time: 1533527037000}
]

可以看到这个数组中有三个数据,分别是三个时间戳,如果没有过滤器,我们只能用普通的方式,循环这个数组,将每一项的时间戳转换为具体的事件。但是,vue提供的过滤器可以帮我们很好的解决这种问题。接下来我们看如何去使用过滤器解决。

首先定义过滤器有两种方式,第一种是全局过滤器,我们可以直接在vue对象上使用filter方法注册过滤器,这种全局注册的过滤器在任何一个组件内都可以使用。第二种则是组件内部的过滤器,注册组件内部过滤器则只能在当前组件内使用,接下来我们使用这两种方式注册过滤器函数。

全局过滤器:

import Vue from 'vue';
Vue.filter('formatTime', function (val) {
  const date = new Date(val);
  const hour = date.getHours();
  const minutes = date.getMinutes();
  const seconds = date.getSeconds();
  return `${hour} : ${minutes} : ${seconds}`;
});

局部组件过滤器(局部过滤器直接在组件内写即可):

export default {
    name: 'FilterDemo',
    /* 局部过滤器 */
    filters: {
      /* 格式化时间戳 */
      formatDate (val) {
        const date = new Date(val);
        const year = date.getFullYear();
        const month = date.getMonth() > 9 ? date.getMonth() + 1 : `0${date.getMonth() + 1}`;
        const day = date.getDate() > 9 ? date.getDate() + 1 : `0${date.getDate() + 1}`;
        return `${year}-${month}-${day}`;
        console.log(val);
      }
    },
    data () {
      return {

      }
    }
    
  }

ok,接下来我们看下如何来使用:

<template>
  <div>
    <h2>vue过滤器:</h2>
    <!-- 局部过滤器 -->
    <p><b>{{ 1533527037000 | formatDate }}</b></p>
    <!-- 全局过滤器 -->
    <p><b>{{ 1533527037000 | formatTime }}</b></p>
  </div>
</template>

在组件里,按照文章开头说的两种方式即可,注意组件内注册的过滤器(这里是formatDate)只能在当前组件内部使用。

项目源码:https://github.com/BadMooncc/vue-api-demo

Logo

前往低代码交流专区

更多推荐