详解Vue串联过滤器的使用场景


Posted in Javascript onApril 30, 2020

平时开发中,需要用到过滤器的地方有很多,比如单位转换、数字打点、文本格式化等,比如:

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串联过滤器的使用场景的文章就介绍到这了,更多相关Vue串联过滤器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
完美解决JS中汉字显示乱码问题(已解决)
Dec 27 Javascript
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 Javascript
vue slots 组件的组合/分发实例
Sep 06 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
ES6 Proxy实现Vue的变化检测问题
Jun 11 Javascript
安装多版本Vue-CLI的实现方法
Mar 24 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
JS使用正则表达式实现常用的表单验证功能分析
Apr 30 #Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 #jQuery
Vue发布订阅模式实现过程图解
Apr 30 #Javascript
Javascript异步执行不按顺序解决方案
Apr 30 #Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 #Javascript
JavaScript自定义超时API代码实例
Apr 30 #Javascript
javascript 模块依赖管理的本质深入详解
Apr 30 #Javascript
You might like
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
python在不同条件下的输入与输出
2020/02/13 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
JPA面试常见问题
2016/11/14 面试题
写好自荐信要注意的问题
2013/11/10 职场文书
运动会开幕式邀请函
2014/01/22 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
小学思品教学反思
2016/02/20 职场文书
大学生创业计划书
2019/06/24 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
Hive日期格式转换方法总结
2022/06/25 数据库