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 相关文章推荐
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
Jan 25 Javascript
jQuery判断元素是否存在的可靠方法
May 06 Javascript
jQuery插件ajaxFileUpload使用实例解析
Oct 19 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
Jan 03 Javascript
微信小程序的部署方法步骤
Sep 04 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 Javascript
Vue自定义render统一项目组弹框功能
Jun 07 Javascript
javascript实现滚轮轮播图片
Dec 13 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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遍历二维数组的代码
2011/04/22 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php时间戳转换的示例
2014/03/31 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python实现音乐下载的统计
2018/06/20 Python
Django 框架模型操作入门教程
2019/11/05 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
Python识别验证码的实现示例
2020/09/30 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
html5 viewport使用方法示例详解
2013/12/02 HTML / CSS
伦敦奥运会口号
2014/06/13 职场文书
公司股份合作协议书
2014/12/07 职场文书
黄石寨导游词
2015/02/05 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server