摘要:Vue的filters过滤器是比较常见的一个知识点,下面我将结合时间戳转换的例子带你快速了解filters的用法。

本文分享自华为云社区《三分钟掌握Vue过滤器filters及时间戳转换》,作者:北极光之夜。。

一.速识概念:

大家好呀,Vue的filters过滤器是比较常见的一个知识点,下面我将结合时间戳转换的例子带你快速了解filters的用法~

按照官方的活来说,Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示。

简单来说就是在filters过滤器里定义一个处理函数,把函数名称写在管道符 “|” 后面,它就会处理管道符 “|” 前自定义的数据,其中自定义的数据会自动成为过滤器函数的参数。

<!-- 在双花括号中 -->
{{ message | capitalize }}<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

过滤器主要可以分为局部过滤器和全局过滤器,下面看详细介绍。

二.局部过滤器:

1. 局部过滤器就是在一个组件的选项中定义本地的过滤器,只有该组件可以用。在我们一般开发中,对于时间后端一般只会返回一个时间戳让前端自己处理,下面比如定义一个转换时间戳为日期格式的过滤器(注意步骤):

<template><div><!-- 4. 渲染数据,设置过滤器 -->{{ times | conversion }}</div>
</template>
<script>
export default {data() {return {// 1.模拟一个时间戳数据times: 1616959086000,};},// 2. 定义过滤器filters: {//3.定义一个处理函数,参数value为要处理数据conversion: function (value) {//调用Date的方法,处理时间戳return new Date(value).toLocaleString();},},
};
</script>

结果,转换成功:

2. 不仅如此,过滤器还可以串联,就是说可以定义多个过滤器,比如下面,相当于先用 conversion函数处理 times 这个数据得出结果,然后继续用 againChange函数处理前面的结果得出最终结果:

  {{ times | conversion | againChange }}

基本演示如下:

<template><div><!-- 5. 放过滤器 -->{{ times | conversion | againChange }}</div>
</template><script>
export default {data() {return {// 1.模拟一个时间戳数据times: 1616959086000,};},// 2. 定义过滤器filters: {//3.定义一个处理函数,参数value为要处理数据conversion: function (value) {//调用Date的方法,处理时间戳return new Date(value).toLocaleString();},//4.再定义一个过滤器,给数据前加上"时间为:"这几个字againChange: function (value) {return "时间为:" + value;},},};
</script>

3. 同时,过滤器也是可以接收参数的, 比如我们改进第1小点的例子,把时间戳转换为能指定格式的时间格式,将想要的时间格式作为过滤器参数,具体用法如下(注意步骤):

<template><div><!-- 4. 放过滤器,同时传参数,返回指定格式的时间 -->{{ times | conversion("yyyy-MM-dd HH:mm:ss 星期w") }}</div>
</template><script>
export default {data() {return {// 1.模拟一个时间戳数据times: 1616959086000,};},// 2. 定义过滤器filters: {//3.定义一个处理函数,参数value为要处理数据,format为传入参数conversion: function (value, format) {//这个转换方法就不介绍了,看看就行,过滤器用法为主var date = new Date(value);function addZero(date) {if (date < 10) {return "0" + date;}return date;}let getTime = {yyyy: date.getFullYear(),yy: date.getFullYear() % 100,MM: addZero(date.getMonth() + 1),M: date.getMonth() + 1,dd: addZero(date.getDate()),d: date.getDate(),HH: addZero(date.getHours()),H: date.getHours(),hh: addZero(date.getHours() % 12),h: date.getHours() % 12,mm: addZero(date.getMinutes()),m: date.getMinutes(),ss: addZero(date.getSeconds()),s: date.getSeconds(),w: (function () {let a = ["日", "一", "二", "三", "四", "五", "六"];return a[date.getDay()];})(),};for (let i in getTime) {format = format.replace(i, getTime[i]);}return format;},},};
</script>

结果如下:

三.全局过滤器:

既然叫全局,那自然是在创建 Vue 实例之前全局定义过滤器,配置好后全部组件直接用就行。一般在自定义的一个文件里专门定义。比如还是上面的处理时间戳的过滤器,用法如下:

1.在src目录下定义filters文件夹,同时在文件夹里定义一个filters.js文件:

2.filters.js文件代码如下:

const conversion = function (value, format) {var date = new Date(value);function addZero(date) {if (date < 10) {return "0" + date;}return date;}let getTime = {yyyy: date.getFullYear(),yy: date.getFullYear() % 100,MM: addZero(date.getMonth() + 1),M: date.getMonth() + 1,dd: addZero(date.getDate()),d: date.getDate(),HH: addZero(date.getHours()),H: date.getHours(),hh: addZero(date.getHours() % 12),h: date.getHours() % 12,mm: addZero(date.getMinutes()),m: date.getMinutes(),ss: addZero(date.getSeconds()),s: date.getSeconds(),w: (function () {let a = ["日", "一", "二", "三", "四", "五", "六"];return a[date.getDay()];})(),};for (let i in getTime) {format = format.replace(i, getTime[i]);}return format;}export {conversion //通过此处导出方法
} 

3.在main.js里引入全局过滤器:

设置全局过滤器格式就是Vue.filter(‘过滤器名称’,对应处理函数);

import {conversion} from './filters/filters.js'
Vue.filter('conversion', conversion);

4.在某个组件直接可以使用:

<template><div><!-- 2. 放过滤器,同时传参,为指定格式时间 -->{{ times | conversion("yyyy-MM-dd HH:mm:ss 星期w") }}</div>
</template><script>
export default {data() {return {// 1.模拟一个时间戳数据times: 1616959086000,};},
};
</script>

一样的结果:

四.扩展:

可以发现,filters过滤器在用法上与computed计算属性有点像,那它们区别是什么呢?

  1. filters 可以传参,但是不可以访问this。不具备缓存功能。同时filters可以串联。可以在局部和全局设置。filter比较简单,只在显式调用时触发,一般应用在模板渲染上。
  2. computed不可以传参,可以访问this,针对的是变量的操作。背后的处理逻辑比较复杂,具有缓存能力,在组件内普适性更强,因此适用于复杂的数据转换、统计等场景。

五.总结:

上面就是filters过滤器的大致内容了。总的来说,filters过滤器可以分为局部过滤器和全局过滤器。局部过滤器在组件内部有效,全局过滤器在每个组件都有效。其中,可以设置多个过滤器和传参数给过滤器。一般过滤器应用在一些简单的数据渲染上。

点击关注,第一时间了解华为云新鲜技术~

带你掌握Vue过滤器filters及时间戳转换相关推荐

  1. 三分钟掌握Vue过滤器filters及时间戳转换

    一.速识概念:    大家好呀,

  2. vue如何过滤html标签,Vue过滤器filters使用详解

    这次给大家带来Vue过滤器filters使用详解,Vue过滤器filters使用的注意事项有哪些,下面就是实战案例,一起来看一下. 示例代码 采用vue单文件组件,使用moment插件格式化日期 {{ ...

  3. vue 过滤器 filters

    <!-- 过滤器: 定义:对要显示的数据进行特定格式化之后再显示(使用与一些简单的逻辑)语法:1. 注册过滤器:Vue.filter.(name, callback) 或 new Vue{fil ...

  4. Vue过滤器filters

    使用场景 用于一些常见的文本格式化.也许后端返回的数据格式并不是最终想要展示出来的,通过过滤器可以进行处理成自己想要展示出来的格式.由"管道"符号指示. 使用方式 1.双花括号插值 ...

  5. Vue——使用date-fns将时间戳转换成日期

    从后端数据拿回来的是时间戳格式,需要将其格式化成日期形式 后端数据: expiry:1656345599 前端展示:有效期:2022-06-27 23:59:59 1.安装date-fns npm i ...

  6. 一个简单的Vue过滤器

    一个简单的Vue过滤器 什么是过滤器: 是一种数据处理的方式,它并不是一定需要使用的. 如果不用过滤器的话,用 methods 或者 computed 配置项也可以实现. 演示一个简单的过滤器,把时间 ...

  7. vue中过滤器filters的this指向问题。

    今天在完成一个时间戳转化时想试试vue的过滤器filters,代码如下: execute_time(time) {if (time === 0) return '/'else return this. ...

  8. Vue过滤器(filters)的简单使用

    1.Vue过滤器的简单介绍 Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式.过滤器应该被添加在 JavaScript 表达 ...

  9. Vue中filters过滤器无效的原因

    Vue中filters过滤器无效的原因 如果你的过滤器内部需要用到循环 请不要使用map函数代替for循环或者是foreach循环 如图: 因为过滤器本身需要一个return 把结果返回出去 然而ma ...

最新文章

  1. React Native Windows 环境搭建(适合有Android 开发基础的同学)
  2. maven pom指定jdk版本及utf-8字符编码
  3. SQLSERVER 游标
  4. 聊聊高并发(二十一)解析java.util.concurrent各个组件(三) 深入理解AQS(一)
  5. MySQL使用二进制日志恢复数据库
  6. 漫步微积分十二——隐函数、分数指数
  7. 村土地利用规划和村庄规划的区别和联系
  8. Python保存任意长度的matplotlib动画为GIF动图
  9. jQuery UI 实现 仿购物车功能 简洁的js
  10. java编写计算器实现cancel_用Java编写的简易计算器
  11. 230.二叉搜索树中第K小的元素
  12. ubuntu编译libjpeg-turbo
  13. php令牌桶,令牌桶限频(TokenBucket)
  14. roc_curve()的用法及用途
  15. TCP快速恢复算法PRR
  16. Python3运行web.py测试,出现RuntimeError: generator raised StopIteration异常
  17. c#精华网站收集(转摘自梅川酷子的博客)
  18. 2022年R2移动式压力容器充装考试模拟100题及在线模拟考试
  19. PowerDesigner根据数据库生成数据字典
  20. 修改照片为社保照片 358*441

热门文章

  1. 在组织中为IT部门构建小型冠军的最快方法
  2. 开源软件在中小企业的应用_开源如何启动我的小企业
  3. 牛客网 [编程题]餐馆
  4. 警惕 | 警惕,mybatis的size()方法竟然有坑!
  5. 编程范式之命令式与函数式
  6. HTML autocomplete
  7. pcl中set程序_PCL中分割方法的介绍(3)
  8. linux服务器进程不存在,查看 Linux 服务器的进程
  9. 用matlab的ADC和DAC过程,谈谈我理解的ADC和DAC
  10. java raw types,java – 为Raw Types抛出不一致的ClassCastException