一、过滤器简介

(1)过滤器创建
  过滤器的本质 是一个有参数 有返回值的方法

new Vue({
filters:{
myCurrency:function(myInput){
return 处理后的数据
}
}
})

(2)过滤器使用
语法:

<any>{{表达式 | 过滤器}}</any>

举个例子:

<h1>{{price | myCurrency}}</h1>

(3)过滤器高级用法

在使用过滤器的时候,还可以指定参数,来告诉过滤器按照参数进行数据的过滤。

①如何给过滤器传参?

<h1>{{price | myCurrency('¥',true)}}</h1>

②如何在过滤器中接收到?

new Vue({
filters:{
//myInput是通过管道传来的数据
//arg1在调用过滤器时在圆括号中第一个参数
//arg2在调用过滤器时在圆括号中第二个参数
myCurrency:function(myInput,arg1,arg2){
return 处理后的数据
}
}
})

二、封装  自定义过滤器

filters.js

/**
* 自定义过滤器
*/
import Vue from 'vue' /**
* 制保留2位小数
* 例如:2,会在2后面补上00.即2.00
*/
Vue.filter('toDecimal2', x => {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x * 100) / 100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
}); /**
* 获取两位小数部分
* 例如:11.05,返回 '05'
* 如果是整数,返回 '00'
*/
Vue.filter('getDecimalPart', x => {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x * 100) / 100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s.split(".")[1];
}); /**
* 金额格式化
* fmtMonty(2,'.', ',')后两个可省略
*/
Vue.filter('fmtMoney', (number, decimals, dec_point, thousnds_stp) => {
/*
* 参数说明:
* number:要格式化的数字
* decimals:保留几位小数
* dec_point:小数点符号
* thousands_sep:千分位符号
* */
number = (number + '').replace(/[^0-9+-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousnds_stp === 'undefined') ? ',' : thousnds_stp,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.ceil(n * k) / k;
}
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
var re = /(-?\d+)(\d{3})/;
while (re.test(s[0])) {
s[0] = s[0].replace(re, "$1" + sep + "$2");
} if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec); }); /**
* 名字,身份证,银行卡,隐藏部分数字变‘*’号
* plusXing(前面保留位数,后面保留位数)
*/
Vue.filter('plusXing', (str, frontLen, endLen) => {
var len = str.length - frontLen - endLen;
var xing = '';
for (var i = 0; i < len; i++) {
xing += '*';
}
return str.substring(0, frontLen) + xing + str.substring(str.length - endLen);
}); /**
* 银行卡号四个数字分割
*/
Vue.filter('formartCode', n => {
var b = parseInt(n).toString();
var len = n.length;
if (len <= 4) {
return n;
} else {
var r = len % 4;
return r > 0 ? b.slice(0, r) + "," + b.slice(r, len).match(/\d{4}/g).join(",") : b.slice(r, len).match(/\d{4}/g).join(" ");
}
}); /**
* 借款、还款完成过滤
*/
Vue.filter('complateState', n => {
switch (n) {
case 0:
return '借款';
case 1:
return '还款';
case 2:
return '逾期记录'
}
}); /**
* 借款状态过滤器
*/
Vue.filter('borrowStateFilter', function (data) {
switch (data) {
case 'SETTING':
return "审核中";
case 'FAIL':
return "放款失败";
case 'NORM':
return "使用中";
case 'OVER':
return "已逾期";
case 'DELQ':
return "已逾期";
case 'OFFED':
return "核销";
case 'CLSDB':
return "关闭";
case 'SETL':
return "已结清"
}
}); /**
* 还款状态过滤器
*/
Vue.filter('repaymentStateFilter', function (data) {
switch (data) {
case '00':
return "还款成功";
case '01':
return "还款失败";
case '02':
return "还款中";
}
}); /**
* 银行小图标
*/
Vue.filter('bankLogoUrl', function (data) {
var imgUrl = "static/img/";
switch (data) {
case '上海银行':
return imgUrl + 'shbank.png';
case '中信银行':
return imgUrl + 'zxbank.png';
case '中原银行':
return imgUrl + 'zybank.jpeg';
case '中国银行':
return imgUrl + 'boc.png';
case '中国建设':
return imgUrl + 'ccb.png';
case '交通银行':
return imgUrl + 'jtbank.png';
case '光大银行':
return imgUrl + 'gdbank.png';
case '兴业银行':
return imgUrl + 'xybank.png';
case '农业银行':
return imgUrl + 'abc.png';
case '工商银行':
return imgUrl + 'icbc.png';
case '平安银行':
return imgUrl + 'pabank.png';
case '广发银行':
return imgUrl + 'gfbank.png';
case '建设银行':
return imgUrl + 'ccb.png';
case '招商银行':
return imgUrl + 'cmb.png';
case '民生银行':
return imgUrl + 'msbank.png';
case '浦东发展':
return imgUrl + 'pdbank.png';
case '邮储银行':
return imgUrl + 'ycbank.png';
case '邮政储蓄':
return imgUrl + 'ycbank.png';
}
}); /**
* (利息等的)费率
*/
Vue.filter('rate', function (data) {
if (data) {
data = data.toString();
console.log(data);
var intS = data.substring(0, data.indexOf('.')) + data.substring(data.indexOf('.') + 1, data.indexOf('.') + 3);
var floatS = data.substring(data.indexOf('.') + 3, data.indexOf('.') + 7);
while (floatS.length < 4) {
floatS = floatS + '0';
}
return parseInt(intS) + '.' + floatS + '%';
}
return '';
}); /**
* 时间过滤
* fmtDate('yyyy,MM,dd')
*/
Vue.filter('fmtDate', (date, fmt) => {
var o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
'S': date.getMilliseconds() // 毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
}
}
return fmt;
}
); /**
* 时间过滤
* date:'yyyy-MM-dd'
*/
Vue.filter('fmtDateStr', (date) => {
if(!date) return '';
var temp = date.split(" ")[0].split("-");
return temp.join("/");
});
Vue.filter('fmtDateStr2', (date) => {
if(!date) return '';
var temp = date.split(" ")[0].split("-");
return temp[0] + "年" + temp[1] + "月" + temp[2] + "日";
});
Vue.filter('fmtTimeStr', (date) => {
if(!date) return '';
var temp = date.split(" ")[0].split("-");
return temp.join("/") + " " + date.split(" ")[1];
});
Vue.filter('fmtTimeStr2', (date) => {
if(!date) return '';
var temp = date.split(" ")[0].split("-");
return temp[0] + "年" + temp[1] + "月" + temp[2] + "日" + " " + date.split(" ")[1];
}); /**
* 当前日期过滤器
* new Date() --> ××年××月××日
*/
Vue.filter('fmtCurrentDate', (date) => {
return date.getFullYear()+'年'+(date.getMonth()+1)+'月'+date.getDate()+'日';
}); /**
* 当前时间过滤器
* new Date() --> ××:××
*/
Vue.filter('fmtCurrentTime', (date) => {
var minutes;
if(date.getMinutes() < 10){
minutes = '0' + date.getMinutes();
}else{
minutes = date.getMinutes();
}
return date.getHours() + ':' + minutes;
}); /**
* 格式化时间为年、月、日、小时、分钟、刚刚
*/
Vue.filter('fmtDate2', (time) => {
let oldDate = new Date(time)
let newDate = new Date()
var dayNum = "";
var getTime = (newDate.getTime() - oldDate.getTime())/1000; if(getTime < 60*5){
dayNum = "刚刚";
}else if(getTime >= 60*5 && getTime < 60*60){
dayNum = parseInt(getTime / 60) + "分钟前";
}else if(getTime >= 3600 && getTime < 3600*24){
dayNum = parseInt(getTime / 3600) + "小时前";
}else if(getTime >= 3600 * 24 && getTime < 3600 * 24 * 30){
dayNum = parseInt(getTime / 3600 / 24 ) + "天前";
}else if(getTime >= 3600 * 24 * 30 && getTime < 3600 * 24 * 30 * 12){
dayNum = parseInt(getTime / 3600 / 24 / 30 ) + "个月前";
}else if(time >= 3600 * 24 * 30 * 12){
dayNum = parseInt(getTime / 3600 / 24 / 30 / 12 ) + "年前";
} // 位数为1,补全0
function addZero(val){
if(val < 10){
val = '0' + String(val);
}
return val;
} let year = oldDate.getFullYear();
let month = oldDate.getMonth()+1;
let day = oldDate.getDate();
let hour = oldDate.getHours();
let minute = oldDate.getMinutes();
let second = oldDate.getSeconds(); month = addZero(month);
day = addZero(day);
hour = addZero(hour);
minute = addZero(minute);
second = addZero(second); return dayNum+" "+year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second;
});

调用:

<!-- 自定义 过滤器 -->
<template>
<div>
<!-- 标题栏 -->
<mt-header title="自定义过滤器">
<router-link to="/" slot="left">
<mt-button icon="back">返回</mt-button>
</router-link>
</mt-header>
<!-- 内容 -->
<div class="cont">{{currentTime | fmtDate2}}</div>
</div>
</template> <script>
export default {
name: 'Filter',
data(){
return {
currentTime: new Date()
}
}
}
</script> <style lang="less" scoped>
.cont{
height: 30px;
line-height: 30px;
text-align: center;
font-size: 16px;
}
</style>

效果图:

vue2.0 自定义过滤器(filter)实例的更多相关文章

  1. vue2.0 自定义过滤器

    2.0中已经废弃了过滤器,需要我们自定义 <div id="app"> {{message|uppercase}} </div> //过滤器 Vue.fil ...

  2. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  3. vue2.0自定义指令

    前面一片文章说了vue2.0过滤器,其实自定义指令跟过滤器非常相似,单就定义方式而言,其与过滤器完全一致,分为局部指令,和全局指令.不过就是filter改为directive的区别. 过滤器一般用于对 ...

  4. asp.net MVC之 自定义过滤器(Filter) - shuaixf

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以 ...

  5. asp.net MVC之 自定义过滤器(Filter)

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  6. CKEditor5 + vue2.0 自定义图片上传、highlight、字体等用法

    因业务需求,要在 vue2.0 的项目里使用富文本编辑器,经过调研多个编辑器,CKEditor5 支持 vue,遂采用.因 CKEditor5 文档比较少,此处记录下引用和一些基本用法. CKEdit ...

  7. [转]MVC之 自定义过滤器(Filter)

    本文转自:http://www.cnblogs.com/kissdodog/archive/2013/01/21/2869298.html 一.自定义Filter 自定义Filter需要继承Actio ...

  8. python测试开发django-70.自定义过滤器filter

    前言 django的模板有很多内置的过滤器,可以满足一些常见的需求,如果有些需求内置过滤器无法满足,那么我们需要自己写一些过滤器了. 自定义过滤器 先在app下新建一个 templatetags 目录 ...

  9. Springboot自定义过滤器Filter

    前言:自己写了个Springboot项目,最近写的功能越来越多,结合业务已经要写过滤器Filter来过滤处理一些请求. 在网上看了几篇博客,总结如下: 过滤器配置方式有两种: 1.通过@WebFilt ...

随机推荐

  1. Linux等待队列与唤醒

    1.数据结构 1.1等待队列头 struct __wait_queue_head { spinlock_t lock; struct list_head task_list; }; typedef s ...

  2. Makefile学习(二)----生成静态库文件

    Lunix下编译静态库文件: .o后缀文件:编译生成的中间代码文件: .a后缀文件:静态库文件,编译的时候会合到可执行程序中,文件比较大: .so后缀文件:动态库文件,只是一个指向,不会合到可执行程序 ...

  3. BZOJ 4809: 皇后

    题目大意: n皇后问题,有些格子不能放. 题解: 直接暴力,并不用加优化就能过. 代码: #include<cstdio> using namespace std; int cc,n,an ...

  4. python数据类型小结

    变量 变量是 为了存储程序 运算过程中的一些中间结果,为了方便日后调用. 变量的命名规则1.要有描述性2.变量名只能_,数字,字母组成,不可以是特殊字符(#)3.不能以中文为变量名4.不能以数字开头5 ...

  5. 【11】把 GitHub 当 CMS 用

    把 GitHub 当 CMS 用 你的网站需要显示一些文字,但是你还不想直接放在 HTML 里面,那你可以把 GitHub 作为你储存内容的一个地方. 这样,就可以让任何一个非程序员通过修改 Mark ...

  6. Matplotlib基本图形之折线图

    Matplotlib基本图形之折线图折线图特点 折线图是用折线将各数据连起来组成的图形常用来观察数据随时间变化的趋势例如:股票价格,温度变化,等等 示例代码: import os import tim ...

  7. ubuntu14.04:php7+apache2+mysql

    apache2: sudo apt-get install apache2 apache2-dev service apache2 start mysql: sudo apt-get install ...

  8. 【JavaScript 1—基础知识点】:宏观概述

    导读:JavaScript是一门新的(也可以说是旧的或者半新语言),里面有很多的知识点都能和已有的知识产生共鸣.但是,虽然简单,相同点也有很多,也有不同点.我脑袋也不好使,所以对于我来说,还是有必要再 ...

  9. 【单调队列+二分查找】bzoj 1012: [JSOI2008]最大数maxnumber

    [题意] 维护一个单调递减的q数组,用id数组记录q数组的每个下标对应在原数组的位置,那么id数组一定有单调性(q数组中越靠后,原数组中也靠后),然后二分查找这个数 [AC] #include< ...

  10. RRAS

    远程访问控制是Windows NT.Win200x Server提供的一种远程服务,它允许用户从远端通过拨号连接连接到一个本地的计算机网络,一旦建立了连接,就相当于处在了本地的LAN中,从而可以使用各 ...