服务器之家

服务器之家 > 正文

Vue封装全局过滤器Filters的步骤

时间:2021-09-29 14:53     来源/作者:文渊

(PS:本文代码在vue-cli3构建的基础vue项目之上进行编写:vue create my-project)

  在前后端分离的项目中,经常会有后台返回的数据需要经过处理才能显示到页面上的场景。

  使用最多的场景就是日期/时间、数字、字符串的格式化处理,实际业务中可能还有更复杂的数据处理逻辑。

  下面就拿封装全局的处理数字和字符串的 filter 来展示 vue 如何 封装全局filter 并统一处理。

一、定义/封装过滤器

  在 src目录 下新建 filters目录 用来专门存放全局过滤器,如果项目的过滤器过多,那么就要按类型分类。
  如果项目需要前台处理的数据不是太多,那么就在 filters目录 下新建一个 index.js 来存放所有的过滤器就足够了。

index.js代码如下:

  1. // 封装过滤器
  2. // 过滤器的声明可以有下列多种写法
  3.  
  4. /**
  5. * Number formatting by unit
  6. * like 10000 => 10k
  7. * @param {number} num
  8. * @param {number} digits
  9. * @return {string}
  10. */
  11. function numberFormatter(num, digits) {
  12. const si = [
  13. { value: 1e18, symbol: "E" },
  14. { value: 1e15, symbol: "P" },
  15. { value: 1e12, symbol: "T" },
  16. { value: 1e9, symbol: "G" },
  17. { value: 1e6, symbol: "M" },
  18. { value: 1e3, symbol: "k" }
  19. ];
  20. for (let i = 0; i < si.length; i++) {
  21. if (num >= si[i].value) {
  22. return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
  23. }
  24. }
  25. return num.toString();
  26. }
  27.  
  28. /**
  29. * Number formatting by thousand
  30. * like 10000 => "10,000"
  31. * @param {number} num
  32. * @return {string}
  33. */
  34. const toThousandFilter = function(num) {
  35. return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
  36. };
  37.  
  38. /**
  39. * Upper case first char
  40. * like "wenyuan" => "Wenyuan"
  41. * @param {string} string
  42. * @return {string}
  43. */
  44. const uppercaseFirst = string => {
  45. return string.charAt(0).toUpperCase() + string.slice(1);
  46. };
  47.  
  48. export default {
  49. numberFormatter,
  50. toThousandFilter,
  51. uppercaseFirst
  52. };

二、注册过滤器

  然后在 main.js 中引入注册即可使用:

  1. import filters from "./filters"; // global filters
  2.  
  3. // register global utility filters
  4. Object.keys(filters).forEach(key => {
  5. Vue.filter(key, filters[key]);
  6. });

Vue封装全局过滤器Filters的步骤

三、在组件内使用写好的过滤器

  在组件中使用:

  1. <template>
  2. <div class="home">
  3. <img alt="Vue logo" src="../assets/logo.png"/>
  4. <h1>score:{{ score | numberFormatter }}</h1>
  5. <h1>score:{{ score | toThousandFilter }}</h1>
  6. <h1>username:{{ username | uppercaseFirst }}</h1>
  7. </div>
  8. </template>
  9.  
  10. <script>
  11. export default {
  12. name: "home",
  13. components: {},
  14. data() {
  15. return {
  16. score: 1200000,
  17. username: "wenyuan"
  18. };
  19. }
  20. };
  21. </script>

四、效果

Vue封装全局过滤器Filters的步骤

五、可能的报错与注意点

  在 main.js 中,要先定义过滤器, 再新建 vue 实例,否则会报Failed to resolve filter: xxx的错误。

以上就是Vue封装全局过滤器Filters的步骤的详细内容,更多关于vue封装过滤器的资料请关注服务器之家其它相关文章!

原文链接:https://www.wenyuanblog.com/blogs/vue-global-filters-packaging.html

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部