美文网首页
vue filter 过滤器用法

vue filter 过滤器用法

作者: 一只鱼_d589 | 来源:发表于2021-01-27 11:22 被阅读0次

转载 https://www.jb51.net/article/185797.htm
平时开发中,需要用到过滤器的地方有很多,比如 单位转换、数字打点、文本格式化等,比如:

Vue.filter('toThousandFilter', function (value) {
   if (!value) return ''
   value = value.toString()
   return .replace(str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g, '$1,')
})

实现效果:

30000 => 30,000

当然这只是常规用法,没什么好说的。下面来说一个我在开发中遇到的一个需要用到串联过滤器的使用场景。

假设需要获取一个订单列表,其中的每一项的 status 字段用来表示订单状态:

{
     id: '',
     order_num: '123456789',
     goodList: [ ... ],
     address: { ... },
     status: 1 // 1 待付款 2 待发货 3 待收货
    }

那我们拿到这个数据在,v-for 的时候,肯定会这样做:

<template>
  <!-- ... -->
  <span class="order_status">{{ orderItem.status | getOrderStatus }}</span>
  <!-- ... -->
</template>
<script>
 export default {
  // ...
  filters: {
    getOrderStatus(status) {
      switch (status.toString()) {
        case '1':
          return '待付款';
        case '1':
          return '待发货';
        case '1':
          return '待收货';
        default:
          return '';
      }
    }
  }
  // ...
 }
</script>
<style scoped type="scss">
  // ...
  .order_status {
    font-size: 14px;
  }
  // ...
</style>

这样,表示状态的 1, 2, 3 就变成了 待付款,待发货,待收货。这没有什么问题。但是,需求来了,当订单未付款时,表示状态的文字应该为红色。就是当状态为 待付款 时,文字要为红色!这个问题曾经困扰了有一段时间,用了各种办法,虽然也是实现了需求,但终归不太优雅。直到最近在翻看 vue 文档,才想起来有串联过滤器的用法,可以完美解决这个需求,上码:

<template>
  <!-- ... -->
  <span class="order_status" :class="orderItem.status | getOrderStatus | getOrderStatusClass">{{ orderItem.status | getOrderStatus }}</span>
  <!-- ... -->
</template>
<script>
 export default {
  // ...
  filters: {
    getOrderStatus(status) {
      switch (status.toString()) {
        case '1':
          return '待付款';
        case '1':
          return '待发货';
        case '1':
          return '待收货';
        default:
          return '';
      }
    },
    getOrderStatusClass(status) {
      if (status === '待付款') {
        return 'not-pay'
      }
      return ''
    }
  }
  // ...
 }
</script>
<style scoped type="scss">
  // ...
  .order_status {
    font-size: 14px;
    &.not-pay {
      color: red;
    }
  }
  // ...
</style>

就这么简单。

这个实现方法并不觉得多完美!

关于过滤器,这里还有几点要注意的:

过滤器必须是个纯函数

过滤器中拿不到 vue 实例,这是 vue 故意这么做的

在全局注册过滤器是用 Vue.filter(),局部则是 filters: {}

在方法中调用过滤器方法为: this.$options.filters.XXX

相关文章

  • [vue]--filters 过滤器

    vue 过滤器组件:用法 官方说明:filter地址

  • 9.自定义vue全局过滤器

    1.Vue.filter('过滤器名字',过滤器函数):

  • 王龙

    过滤器div: {{123.456|ab}} 1全局过滤器: Vue.filter('abc'...

  • Vue(2)

    过滤器Filter Vue可以自定义过滤器,可以在{{message}}和v-bind两处使用。 Filter的定...

  • vue—filter 过滤器

    filter是个神奇的东西,css中有filter属性,js里也有filter属性,vue也用filter做过滤器...

  • css中filter属性

    filter是个神奇的东西,css中有filter属性,js里也有filter属性,vue也用filter做过滤器...

  • js中filter属性

    filter是个神奇的东西,css中有filter属性,js里也有filter属性,vue也用filter做过滤器...

  • 微信小程序 - wxs简单应用

    wxs 应用类似于 vue 的 filter 过滤器

  • Vue-04

    过滤器:对显示在页面上的数据进行筛选 全局过滤器 和Vue同级 Vue.filter(“过滤器名称”,func...

  • 3 Vue filter过滤器、样式动态改变 class、sty

    1、filter过滤器 ->全局Vue.filter();局部filters:{}; ->可连着调用多个 2、Vu...

网友评论

      本文标题:vue filter 过滤器用法

      本文链接:https://www.haomeiwen.com/subject/veoozktx.html