详解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 相关文章推荐
Mootools 1.2教程 选项卡效果(Tabs)
Sep 15 Javascript
jquery 图片截取工具jquery.imagecropper.js
Apr 09 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
把Node.js程序加入服务实现随机启动
Jun 25 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
Vue.js自定义指令的用法与实例解析
Jan 18 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
Sep 26 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
vue实现数字滚动效果
Jun 29 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中数组定义的几种方法
2013/09/01 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
javascript闭包入门示例
2014/04/30 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
python二叉树的实现实例
2013/11/21 Python
python实现人机猜拳小游戏
2020/02/03 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
办公室主任岗位职责
2013/11/08 职场文书
内衣营销方案
2014/03/15 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
2014年工程工作总结
2014/11/25 职场文书
受资助学生感谢信
2015/01/21 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
胡桃夹子观后感
2015/06/11 职场文书
python 中yaml文件用法大全
2021/07/04 Python
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
Python字符串的转义字符
2022/04/07 Python