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 相关文章推荐
IE6,IE7下js动态加载图片不显示错误
Jul 17 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
Jul 17 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
JavaScript监听手机物理返回键的两种解决方法
Aug 14 Javascript
基于Datatables跳转到指定页的简单实例
Nov 09 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
javascript中函数的写法实例代码详解
Oct 28 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 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 checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
学习php笔记 字符串处理
2010/10/19 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
python中黄金分割法实现方法
2015/05/06 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
python PyTorch预训练示例
2018/02/11 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
班级年度安全计划书
2014/05/01 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
校运动会广播稿300字
2014/10/07 职场文书
教师个人年终总结
2015/02/11 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Go语言基础函数基本用法及示例详解
2021/11/17 Golang