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 相关文章推荐
各浏览器对click方法的支持差异小结
Jul 31 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 Javascript
div模拟滚动条效果示例代码
Oct 16 Javascript
Jquery倒计时源码分享
May 16 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
js实现文字滚动效果
Mar 03 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
node.js 和HTML5开发本地桌面应用程序
Dec 13 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
详解Webpack实战之构建 Electron 应用
Dec 25 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
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
如何使用Strace调试工具
2013/06/03 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
TensorFlow实现创建分类器
2018/02/06 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
django model通过字典更新数据实例
2020/04/01 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
html5与css3小应用
2013/04/03 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
女大学生个人求职信
2013/12/09 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
实习科室评语
2015/01/04 职场文书
简历自我评价优缺点
2015/03/11 职场文书
少年犯观后感
2015/06/11 职场文书
MySQL时区造成时差问题
2022/04/13 MySQL