详解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 相关文章推荐
浏览器脚本兼容 文本框中,回车键触发事件的兼容
Jun 21 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
原生javascript实现自动更新的时间日期
Feb 12 Javascript
vue-hook-form使用详解
Apr 07 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
Jun 08 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 Javascript
详解webpack require.ensure与require AMD的区别
Dec 13 Javascript
Node中使用ES6语法的基础教程
Jan 05 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
Apr 22 Javascript
自定义Vue组件打包、发布到npm及使用教程
May 22 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数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
CI框架表单验证实例详解
2016/11/21 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
用js实现放大镜效果
2020/10/28 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
python中stdout输出不缓存的设置方法
2014/05/29 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
树莓派实现移动拍照
2019/06/22 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Python threading的使用方法解析
2019/08/28 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
中华魂放飞梦想演讲稿
2014/08/26 职场文书
实名检举信范文
2015/03/02 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis