3.Vue过滤器
1.概念:
Vue.js 允许你自定义过滤器,可被用作一些常见文本的格式化,过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;
2.过滤器调用时候的格式:
例如:下面HTML元素使用过滤器(在输出ctime的时候使用过滤器进行处理,| 管道符)
使用Vue过滤器对下面时间进行格式化:
<td>{{item.ctime | dataFormat('yyyy-mm-dd')}}</td>
3.在Vue中过滤器定义语法:
Vue.filter('过滤器的名称', function(){})
注意:过滤器中的 function 中的第一个参数已经被规定死了,永远都是过滤器|管道符前面传递过来的数据
例如:Vue.filter('过滤器的名称', function (data) {return data + '123'})
4.过滤器的基本使用:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="./lib/vue-2.4.0.js"></script> </head> <body> <div id="app"> <p>{{ msg | msgFormat('疯狂+1', '123') | test }}</p> </div> <script> // 定义一个Vue全局的过滤器,名字叫做msgFormat,过滤器中可进行传参 Vue.filter('msgFormat', function (msg, arg, arg2) { // 字符串的replace方法的第一个参数,除了可写一个字符串之外,还可以定义一个正则,g表示全局匹配 return msg.replace(/单纯/g, arg + arg2) }) Vue.filter('test', function (msg) { return msg + '========' }) // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: { msg: '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人' }, methods: {} }); </script> </body> </html>
在Vue中可以多次调用过滤器
5.定义格式化时间的全局过滤器dataFormat('yyyy-mm-dd')带参数:
<script> //全局的过滤器,进行时间的格式化(所谓的全局过滤器,就是所有的Vue的vm实例都共享的) Vue.filter('dateFormat', function (dateStr, pattern) { // 根据给定的时间字符串,得到特定的时间 var dt = new Date(dateStr) //yyyy-mm-dd var y = dt.getFullYear() var m = dt.getMonth() + 1 var d = dt.getDate() if (pattern.toLowerCase() === 'yyyy-mm-dd') { return `${y}-${m}-${d}` } else { var hh = dt.getHours() var mm = dt.getMinutes() var ss = dt.getSeconds() return `${y}-${m}-${d} ${hh}:${mm}:${ss}` } }) </script>
6.定义格式化时间的全局过滤器dataFormat()不带参数:
<script> //全局的过滤器,进行时间的格式化(所谓的全局过滤器,就是所有的VM实例都共享的) Vue.filter('dateFormat', function (dateStr, pattern="") { // 根据给定的时间字符串,得到特定的时间 var dt = new Date(dateStr) //yyyy-mm-dd var y = dt.getFullYear() var m = dt.getMonth() + 1 var d = dt.getDate() //pattern设置为""(ES6形参的默认值),否则pattern.toLowerCase报错 if (pattern.toLowerCase() === 'yyyy-mm-dd') { return `${y}-${m}-${d}` } else { var hh = dt.getHours() var mm = dt.getMinutes() var ss = dt.getSeconds() return `${y}-${m}-${d} ${hh}:${mm}:${ss}` } }) </script>
7.定义格式化时间的私有过滤器(局部):
控制区域:app2的私有过滤器
<div id="app2"> <h3 v-color="'pink'" v-fontweight="900" v-fontsize="50">{{ dt | dateFormat }}</h3> </div>
//如何自定义一个私有的过滤器(局部) var vm2 = new Vue({ el: '#app2', data: { dt: new Date() }, methods: {}, filters: { // 定义私有过滤器 过滤器有两个条件【过滤器名称 和 处理函数】 //过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,优先调用私有过滤器 dateFormat: function (dateStr, pattern = '') { //根据给定的时间字符串,得到特定的时间 var dt = new Date(dateStr) //yyyy-mm-dd var y = dt.getFullYear() var m = (dt.getMonth() + 1).toString().padStart(2, '0') var d = dt.getDate().toString().padStart(2, '0') if (pattern.toLowerCase() === 'yyyy-mm-dd') { return `${y}-${m}-${d}` } else { var hh = dt.getHours().toString().padStart(2, '0') var mm = dt.getMinutes().toString().padStart(2, '0') var ss = dt.getSeconds().toString().padStart(2, '0') return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~~~~~~` } } } })
注意:使用ES6中的字符串新方法 String.prototype.padStart(maxLength, fillString='') 或 String.prototype.padEnd(maxLength, fillString='')来填充字符串;
你情我愿,我们就在一起!