vue中的过滤器及其时间格式化问题


Posted in Javascript onApril 09, 2020

一、过滤器介绍

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

<!-- 在双花括号中 -->
{{ message | capitalize }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

二、全局过滤器

在创建 Vue 实例之前全局定义过滤器

【 代码示例 】

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>过滤器</title>
  <script src="js/vue.js"></script>
</head>

<body>
  <div id="app">
    <input type="text" v-model="msg">
    <div>{{ msg | strUpper }}</div>
  </div>
  <script>
    // 定义一个全局过滤器,把字符串的第一个字符转换为大写
    Vue.filter('strUpper', function (str) {
      return str.charAt(0).toUpperCase() + str.slice(1)
    })
    var vm = new Vue({
      el: '#app',
      data: {
        msg: ''
      }
    })
  </script>
</body>

</html>

测试结果:

vue中的过滤器及其时间格式化问题

过滤器可以串联。在一个插值表达式中可以使用多个过滤器,过滤器之间用管道符 隔开,过滤器从左到右的顺序进行执行。

{{ message | filterA | filterB }}

在这个例子中,filterA 被定义为接收单个参数的过滤器函数,表达式 message的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。

调用第一个过滤器会使输入的字符串第一个字符转成大写,调用第二个过滤器替换字符串中的空格为逗号。

【 代码示例 】

<div>{{ msg | strUpper | strReplace }}</div>

Vue.filter('strReplace', function (str) {
  return str.replace(/ /g, ',')
})

测试结果:

vue中的过滤器及其时间格式化问题

【 知识拓展 】

slice() 方法可从已有的数组中返回选定的元素。

① 语法:

arrayObject.slice(start,end)

② 参数:

vue中的过滤器及其时间格式化问题

③ 返回值 :

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

三、局部过滤器

定义一个局部的过滤器,格式化当前时间

【 代码示例 】

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="winowh=device-winowh, initial-scale=1.0">
  <title>过滤器学习2</title>
  <script src="js/vue.js"></script>
</head>

<body>
  <div id="app">
    <div>当前时间是: {{ dateTime }}</div>
    <div>格式化后的时间是: {{ dateTime | dateFormat }}</div>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        dateTime: new Date(),
      },
      // 定义一个局部的过滤器,格式化当前时间
      filters: {
        dateFormat: (dateTime) => {
          var now = new Date(dateTime)
          var y = now.getFullYear()
          var m = (now.getMonth() + 1).toString().padStart(2, '0')
          var d = now.getDate().toString().padStart(2, '0')
          var hh = now.getHours().toString().padStart(2, '0')
          var mm = now.getMinutes().toString().padStart(2, '0')
          var ss = now.getSeconds().toString().padStart(2, '0')
          // 过滤器中要有返回值
          return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
        }
      }
    })
  </script>
</body>

</html>

测试结果:

vue中的过滤器及其时间格式化问题

注意:

当有两个名称相同的全局过滤器和局部过滤器的时候,会以就近原则进行调用过滤器,局部过滤器的优先级高于全局过滤器。

【 知识拓展 】

padStart() 可以在字符串的开头进行字符补全。

① 语法:

str.padStart(targetLength [, padString])

② 参数:

vue中的过滤器及其时间格式化问题

③ 返回值:

在原字符串开头填充指定的填充字符串直到目标长度所形成的新字符串。

借鉴网上的常用方法格式化时间

<body>
  <div id="app">
    <div>当前时间是: {{ dateTime }}</div>
    <div>格式化后的时间是: {{ dateTime | dateFormat('yyyy-MM-dd hh:mm:ss') }}</div>
  </div>
  <script>
    Date.prototype.format = function (format) {
      var dateMap = {
        "M+": this.getMonth() + 1, // 月份
        "d+": this.getDate(), // 日
        "h+": this.getHours(), // 小时
        "m+": this.getMinutes(), // 分
        "s+": this.getSeconds(), // 秒
        "q+": Math.floor((this.getMonth() + 3) / 3), // 季度
        "S": this.getMilliseconds() // 毫秒
      };
      if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp
        .$1.length));
      for (var k in dateMap)
        if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, (RegExp.$1.length ==
          1) ? (dateMap[k]) : (("00" + dateMap[k]).substr(("" + dateMap[k]).length)));
      return format;
    }
    var vm = new Vue({
      el: '#app',
      data: {
        dateTime: new Date(),
      },
      // 定义一个局部的过滤器,格式化当前时间
      filters: {
        dateFormat: (dateTime, fmt) => {
          var dt = new Date(dateTime)
          return dt.format(fmt)
        }
      },
    })
  </script>
</body>

总结

到此这篇关于vue中的过滤器及其时间格式化问题的文章就介绍到这了,更多相关vue 过滤器时间格式化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
优秀js开源框架-jQuery使用手册(1)
Mar 10 Javascript
List Information About the Binary Files Used by an Application
Jun 11 Javascript
javascript 网页跳转的方法
Dec 24 Javascript
jquery链式操作的正确使用方法
Jan 06 Javascript
了解Javascript的模块化开发
Mar 02 Javascript
轮播图组件js代码
Aug 08 Javascript
JS弹性运动实现方法分析
Dec 15 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
详解Angular的8个主要构造块
Jun 20 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
Mar 06 Javascript
vue2配置scss的方法步骤
Jun 06 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 Javascript
微信小程序保存图片到相册权限设置
Apr 09 #Javascript
微信小程序仿通讯录功能
Apr 09 #Javascript
vue cli4下环境变量和模式示例详解
Apr 09 #Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
Apr 09 #Javascript
微信小程序吸底区域适配iPhoneX的实现
Apr 09 #Javascript
加速vue组件渲染之性能优化
Apr 09 #Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 #Javascript
You might like
提升PHP执行速度全攻略
2006/10/09 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
JavaScript解析URL参数示例代码
2013/08/12 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
详解python中各种文件打开模式
2020/01/19 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
标记环介质访问控制协议
2016/03/27 面试题
创业计划书的写作技巧及要点
2014/01/31 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
清扬洗发水广告词
2014/03/14 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
酒后驾车标语
2014/06/30 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python