时间:2021-05-26
(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 filtersObject.keys(filters).forEach(key => { Vue.filter(key, filters[key]);});三、在组件内使用写好的过滤器
在组件中使用:
<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>四、效果
五、可能的报错与注意点
在 main.js 中,要先定义过滤器, 再新建 vue 实例,否则会报Failed to resolve filter: xxx的错误。
以上就是Vue封装全局过滤器Filters的步骤的详细内容,更多关于vue封装过滤器的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一自定义过滤器(注册在Vue全局)注意事项:(1)全局方法Vue.filter()注册一个自定义过滤器,必须放在Vue实例化前面(2)过滤器函数始终以表达式的值
前言vue中过滤器filters的作用是什么?过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考
需求:vue中,除了在模板中使用过滤器,有时候,methods中也需要使用filters中的过滤器,网友hongz1125提出的解决办法:this.$optio
filters过滤器已从Vue3.0中删除,不再支持。2.x语法在2.x中,开发人员可以使用过滤器来处理常见的文本格式。BankAccountBalance{{
过滤器-时间戳转化第一步:定义过滤器,filters.jsexportfunctionformatDate(date,fmt){if(/(y+)/.test(f