一、过滤器简介

(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. 牛客网暑期ACM多校训练营(第一场)J Different Integers(树状数组, 离线)

    题意: 给定n个数字, 然后给出m个区间, 求区间外其他数字的种类有多少. 分析: 将区间以r为基准升序排序, 每次处理pre~r的数字第一次出现的位置. #include<bits/stdc+ ...

  2. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze

    262144K   There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...

  3. python基础学习笔记——方法返回值

    字符串中(需要有变量接收) 判断是不是阿拉伯数字,返回的是布尔值 1 2 3 4 name = 'alexdasx' new_name = name.isdigit() print(new_name) ...

  4. 【SaltStack】SaltStack研究心得

    基础篇 ------------------------------------------------------------------------------------------------ ...

  5. Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \

    class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vect ...

  6. MySQL 2003 [ERROR] /usr/sbin/mysqld: Incorrect key file for table './keyword_search/keyword.MYI'; try to repair it

    今天对一个有四百多万数据的表增加一个功能时,当做数据插入时,显示没有插入,到Linux的log下面查看了发现下面这条错误信息 在stacOver上面找到这句: 存储引擎(MyISAM)支持修复表.你应 ...

  7. Windows Server AppFabric

    文章:Windows Server AppFabric简介 介绍了AppFabric强大的功能.

  8. 九度oj 题目1104:整除问题

    题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. ...

  9. AFNetWorking出现code=-1016错误解决办法

    报错类似: 2015-12-09 15:58:03.062 Carloans[14328:2300485] Error Domain=com.alamofire.error.serialization ...

  10. 算法复习——费用流模板(poj2135)

    题目: Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16898   Accepted: 6543 De ...