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 相关文章推荐
js操作iframe兼容各种主流浏览器示例代码
Jul 22 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
JavaScript动态提示输入框输入字数的方法
Jul 27 Javascript
QQ登录背景闪动效果附效果演示源码下载
Sep 22 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 Javascript
jQuery实现鼠标经过事件的延时处理效果
Aug 20 Javascript
jquery遍历table的tr获取td的值实现方法
May 19 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
小试小程序云开发(小结)
Jun 06 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
Jun 27 Javascript
vue 父组件通过v-model接收子组件的值的代码
Oct 27 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
E路文章系统PHP
2006/12/11 PHP
php中取得文件的后缀名?
2012/02/20 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
JS的get和set使用示例
2014/02/20 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
八大排序算法的Python实现
2021/01/28 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
python中的for循环
2018/09/28 Python
Django中的静态文件管理过程解析
2019/08/01 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
用python自动生成日历
2021/04/24 Python
Python爬取某拍短视频
2021/06/11 Python