详解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 可排列的表实现代码
Nov 13 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
javascript跨域原因以及解决方案分享
Apr 08 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
Jun 01 Javascript
JS 调用微信扫一扫功能
Dec 22 Javascript
JavaScript正则表达式函数总结(常用)
Feb 22 Javascript
JS实现的视频弹幕效果示例
Aug 17 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
Sep 07 Javascript
使用Vue调取接口,并渲染数据的示例代码
Oct 28 Javascript
这样回答继承可能面试官更满意
Dec 10 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php中动态变量用法实例
2015/06/10 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
js 窗口抖动示例
2013/09/04 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python3.x上post发送json数据
2018/03/04 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python实现公司年会抽奖程序
2019/01/22 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
django rest framework serializers序列化实例
2020/05/13 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
迅雷Cued工作心得体会
2014/01/27 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
雷峰塔导游词
2015/02/09 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang