详解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 相关文章推荐
为jQuery增加join方法的实现代码
Nov 28 Javascript
使用UglifyJS合并/压缩JavaScript的方法
Mar 07 Javascript
extJS中常用的4种Ajax异步提交方式
Mar 07 Javascript
Jquery性能优化详解
May 15 Javascript
jQuery对象初始化的传参方式
Feb 26 Javascript
React.js入门实例教程之创建hello world 的5种方式
May 11 Javascript
完美的js div拖拽实例代码
Sep 24 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
AngularJs 延时器、计时器实例代码
Sep 16 Javascript
js中let能否完全替代IIFE
Jun 15 Javascript
微信小程序自定义胶囊样式
Dec 27 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的历史和优缺点
2006/10/09 PHP
PHP 中执行系统外部命令
2006/10/09 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
php+mysql数据库查询实例
2015/01/21 PHP
php随机抽奖实例分析
2015/03/04 PHP
js静态作用域的功能。
2006/12/25 Javascript
超简单的jquery的AJAX用法
2010/05/10 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
js实现简易计算器功能
2019/10/18 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
python实现将内容分行输出
2015/11/05 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python Django view 两种return的实现方式
2020/03/16 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
公司担保书格式范文
2014/05/12 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
导游词格式
2015/02/13 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
活动经费申请报告
2015/05/15 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
PyTorch中的torch.cat简单介绍
2022/03/17 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js