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 相关文章推荐
特殊情况下如何获取span里面的值
May 20 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
DeviceOne 让你一见钟情的App快速开发平台
Feb 17 Javascript
AngularJS入门教程之REST和定制服务详解
Aug 19 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 Javascript
基于JavaScript实现多级菜单效果
Jul 25 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
编写React组件项目实践分析
Mar 04 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
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
pycharm显示远程图片的实现
2019/11/04 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
什么是python的列表推导式
2020/05/26 Python
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
办公室保洁员岗位职责
2013/12/02 职场文书
大学生创业策划书
2014/02/02 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
个人银行贷款担保书
2014/04/01 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
高中团支书竞选稿
2015/11/21 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书