Vue封装全局过滤器Filters的步骤


Posted in Javascript onSeptember 16, 2020

(PS:本文代码在vue-cli3构建的基础vue项目之上进行编写:vue create my-project)

在前后端分离的项目中,经常会有后台返回的数据需要经过处理才能显示到页面上的场景。

使用最多的场景就是日期/时间、数字、字符串的格式化处理,实际业务中可能还有更复杂的数据处理逻辑。

下面就拿封装全局的处理数字和字符串的 filter 来展示 vue 如何 封装全局filter 并统一处理。

一、定义/封装过滤器

在 src目录 下新建 filters目录 用来专门存放全局过滤器,如果项目的过滤器过多,那么就要按类型分类。

如果项目需要前台处理的数据不是太多,那么就在 filters目录 下新建一个 index.js 来存放所有的过滤器就足够了。

index.js代码如下:

// 封装过滤器
// 过滤器的声明可以有下列多种写法

/**
 * Number formatting by unit
 * like 10000 => 10k
 * @param {number} num
 * @param {number} digits
 * @return {string}
 */
function numberFormatter(num, digits) {
 const si = [
  { value: 1e18, symbol: "E" },
  { value: 1e15, symbol: "P" },
  { value: 1e12, symbol: "T" },
  { value: 1e9, symbol: "G" },
  { value: 1e6, symbol: "M" },
  { value: 1e3, symbol: "k" }
 ];
 for (let i = 0; i < si.length; i++) {
  if (num >= si[i].value) {
   return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
  }
 }
 return num.toString();
}

/**
 * Number formatting by thousand
 * like 10000 => "10,000"
 * @param {number} num
 * @return {string}
 */
const toThousandFilter = function(num) {
 return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
};

/**
 * Upper case first char
 * like "wenyuan" => "Wenyuan"
 * @param {string} string
 * @return {string}
 */
const uppercaseFirst = string => {
 return string.charAt(0).toUpperCase() + string.slice(1);
};

export default {
 numberFormatter,
 toThousandFilter,
 uppercaseFirst
};

二、注册过滤器

然后在 main.js 中引入注册即可使用:

import filters from "./filters"; // global filters

// register global utility filters
Object.keys(filters).forEach(key => {
 Vue.filter(key, filters[key]);
});

Vue封装全局过滤器Filters的步骤

三、在组件内使用写好的过滤器

在组件中使用:

<template>
 <div class="home">
  <img alt="Vue logo" src="../assets/logo.png"/>
  <h1>score:{{ score | numberFormatter }}</h1>
  <h1>score:{{ score | toThousandFilter }}</h1>
  <h1>username:{{ username | uppercaseFirst }}</h1>
 </div>
</template>

<script>
export default {
 name: "home",
 components: {},
 data() {
  return {
   score: 1200000,
   username: "wenyuan"
  };
 }
};
</script>

四、效果

Vue封装全局过滤器Filters的步骤

五、可能的报错与注意点

在 main.js 中,要先定义过滤器, 再新建 vue 实例,否则会报Failed to resolve filter: xxx的错误。

以上就是Vue封装全局过滤器Filters的步骤的详细内容,更多关于vue封装过滤器的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
javscript对象原型的一些看法
Sep 19 Javascript
非阻塞动态加载javascript广告实现代码
Nov 17 Javascript
在JavaScript中获取请求的URL参数[正则]
Dec 25 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
Javascript验证方法大全
Sep 21 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
仿iframe效果Aajx文件上传实例
Nov 18 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
Mar 13 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
jQuery实现全选按钮
Jan 01 jQuery
Vue父子组件传值的一些坑
Sep 16 #Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 #Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 #Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 #Javascript
vue中选中多个选项并且改变选中的样式的实例代码
Sep 16 #Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 #Javascript
Vue项目打包编译优化方案
Sep 16 #Javascript
You might like
php配合jquery实现增删操作具体实例
2013/12/12 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
js获取当前select 元素值的代码
2010/04/19 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
实例讲解Python中的私有属性
2014/08/21 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
python的链表基础知识点
2020/09/13 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
旅游管理本科生求职信
2013/10/14 职场文书
医院护士的求职信范文
2013/12/26 职场文书
供货协议书
2014/04/22 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
清洁员岗位职责
2015/02/15 职场文书
农村党支部承诺书
2015/04/30 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python