详解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 相关文章推荐
event对象的方法 兼容多浏览器
Jun 27 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 Javascript
jQuery asp.net 用json格式返回自定义对象
Apr 07 Javascript
javascript中的一些注意事项 更新中
Dec 06 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
详解如何在vue-cli中使用vuex
Aug 07 Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
vue常用高阶函数及综合实例
2021/02/25 Vue.js
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
美国购车网站:TrueCar
2016/10/19 全球购物
MYSQL支持事务吗
2013/08/09 面试题
如何掌握自荐信格式呢
2013/11/19 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers