详解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 相关文章推荐
javascript函数中的arguments参数
Aug 01 Javascript
JQuery切换显示的效果实例代码
Feb 27 Javascript
javascript学习笔记(四)function函数部分
Sep 30 Javascript
JavaScript更改原始对象valueOf的方法
Mar 19 Javascript
JavaScript使用yield模拟多线程的方法
Mar 19 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
js实现按钮控制带有停顿效果的图片滚动
Aug 30 Javascript
jquery datatable服务端分页
Aug 31 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 Javascript
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之密码加密的几种方式
2015/07/29 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
python获取引用对象的个数方式
2019/12/20 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
30岁生日感言
2014/01/25 职场文书
元旦联欢会主持词
2014/03/26 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
七一建党节慰问信
2015/02/14 职场文书
学校捐款活动总结
2015/05/09 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL
PHP正则表达式之RCEService回溯
2022/04/11 PHP