详解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 圆形旋转图片滚动切换效果
Jan 19 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
原来Jquery.load的方法可以一直load下去
Mar 28 Javascript
JavaScript prototype属性深入介绍
Nov 27 Javascript
随窗体滑动的小插件sticky源码
Jun 21 Javascript
总结javascript中的六种迭代器
Aug 16 Javascript
利用Javascript实现BMI计算器
Aug 16 Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 Javascript
Vue2.0实现购物车功能
Jun 05 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
vue.js实现的幻灯片功能示例
Jan 18 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和MySql来与ODBC数据连接
2006/10/09 PHP
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
一段实用的php验证码函数
2016/05/19 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python常用的日期时间处理方法示例
2015/02/08 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
采购部部长岗位职责
2014/02/06 职场文书
优秀会计求职信
2014/07/04 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers