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实现编辑div节点名称的方法
Dec 17 Javascript
JavaScript动态修改背景颜色的方法
Apr 16 Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
addeventlistener监听scroll跟touch(实例讲解)
Aug 04 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
Jan 25 Javascript
webpack配置打包后图片路径出错的解决
Apr 26 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
微信小程序点击顶部导航栏切换样式代码实例
Nov 12 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
Jul 17 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
Javascript MD4
2006/12/20 Javascript
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python中logging日志库实例详解
2020/02/19 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
员工保密协议书
2014/09/27 职场文书
2014财务年度工作总结
2014/11/11 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
会计专业自荐信范文
2019/05/22 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android