详解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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
用js遍历 table的脚本
Jul 23 Javascript
Javascript this关键字使用分析
Oct 21 Javascript
JavaScript实现大数的运算
Nov 24 Javascript
jQuery中closest()函数用法实例
Jan 07 Javascript
javascript判断firebug是否开启的方法
Nov 23 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
JS设置CSS样式的方式汇总
Jan 21 Javascript
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 jQuery
Vue项目部署在Spring Boot出现页面空白问题的解决方案
Nov 26 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 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
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
PHP加密解密函数详解
2015/10/28 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
django创建超级用户过程解析
2019/09/18 Python
快速查找Python安装路径方法
2020/02/06 Python
python logging设置level失败的解决方法
2020/02/19 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
高中班长自我鉴定
2013/12/20 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
党支部审查意见
2015/06/02 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
三八节祝酒词
2015/08/11 职场文书
python和anaconda的区别
2022/05/06 Python