当前位置:   article > 正文

Vue中filters过滤器的封装_vue的管道符过滤器封装

vue的管道符过滤器封装

目录

Vue中的filters过滤器是什么?

Vue中为什么要封装filters过滤器 

封装准备开始:如何封装一个全局的filters过滤器:


Vue中的filters过滤是什么?

在vue中过滤器实质上是对文本进行格式化,在渲染前对数据进行处理和筛选。

语法格式:

<h1>{{data | filter(参数)}}</h1>

注意:

1.当有局部和全局两个名称相同的过滤器时候,会以就近原则进行调用,即:局部过滤器优先于全局过滤器被调用!

2.一个表达式可以使用多个过滤器。过滤器之间需要用管道符“|”隔开。其执行顺序从左往右


Vue中为什么要封装filters过滤器 

如果有过多的页面要使用同一个或者多个过滤器时,为了避免反复拷贝黏贴,造成n个版本的代 码,从而使代码维护异常困难,增大服务器端的压力。


封装准备开始:
如何封装一个全局的filters过滤器:

1.新建一个文件夹名字叫filters,然后在里面在新建一个filters.js

在filters.js中写

例子

  1. export function nameFilters(name) {  //对名字进行过滤    张三(*三)  张某某(张*某)
  2.   if (typeof(name) == "undefined") {
  3.     return name;
  4.   } else if (name.length < 2) {
  5.     return name;
  6.   } else if (name.length === 2) {
  7.     return new Array(name.length).join("*") + name.substr(-1);
  8.   } else {
  9.     return (
  10.       name.substr(01) + new Array(name.length - 1).join("*") + name.substr(-1)
  11.     );
  12.   }
  13. }
  14. export function idCardFilters(num) {   //身份证进行过滤  429004199902024125(42900419********25)
  15.   if (typeof(num) == "undefined") {
  16.     return num;
  17.   } else if (num.length != 18) {
  18.     return num;
  19.   } else {
  20.     return num.replace(/(\d{8})\d{8}(\d*)/"$1********$2");
  21.   }
  22. }
  23. export function sexIdcareFilter(num) {   //根据身份证判断性别
  24.   if (typeof(num) == "undefined") {
  25.     return num;
  26.   } else if (num.length != 18) {
  27.     return num;
  28.   } else {
  29.     return num.substr(161) % 2 === 1 ? "男" : "女";
  30.   }
  31. }
  32. export function phoneFilters(num) {   //手机号码进行过滤  18641526389  (186****6389)
  33.   if (typeof(num) == "undefined") {
  34.     return num;
  35.   } else if (num.length != 11) {
  36.     return num;
  37.   } else {
  38.     return num.replace(/(\d{3})\d{4}(\d*)/"$1****$2");
  39.   }
  40. }
  41. export function textFilter(type, n) { //文本超出后截取
  42.     if (typeof(type) == 'undefined' || type.length <= n) {
  43.         return type
  44.     } else {
  45.        if (type.length > n) {
  46.            return type.substr(0, n) + '...'
  47.         }
  48.     }
  49. }
  50. export function priceFilter(type, n) { //保留两位小数
  51. if (typeof(type) == 'undefined') {
  52. return type
  53. } else {
  54. return "¥" + type.toFixed(n)
  55. }
  56. }
  57. export function timeFilters(type) { //时间
  58. var time = new Date(type);
  59. var year = time.getFullYear(); //年
  60. var month = (time.getMonth() + 1 + "").padStart(2, "0"); //月
  61. var date = (time.getDate() + "").padStart(2, "0"); //日
  62. var hour = (time.getHours() + "").padStart(2, "0"); //时
  63. var minutes = (time.getMinutes() + "").padStart(2, "0"); //分
  64. var seconds = (time.getSeconds() + "").padStart(2, "0"); //秒
  65. return `${year}-${month}-${date} ${hour}:${minutes}:${seconds}`;
  66. }

2.在main.js中引用

  1. import * as filters from './filters/filters.js'      //引入写好的filters文件
  2. //全局过滤器
  3. Object.keys(filters).forEach(key => {
  4.   Vue.filter(key, filters[key])
  5. })

3.直接到页面中用   
例子

  1. <template>
  2. <h1>{{ title | textFilter}}</h1>
  3. </template>


后续扩展 

(1).Vue获取当前时间以及星期几

  1. <template>
  2. <div class="text">
  3. {{time}}--{{week}}
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. time: '', //日期
  11. week: '' //星期几
  12. }
  13. },
  14. methods: {
  15. getTime() {
  16. var time = new Date();
  17. var wk = time.getDay()
  18. var year = time.getFullYear(); //年
  19. var month = (time.getMonth() + 1 + "").padStart(2, "0"); //月
  20. var date = (time.getDate() + "").padStart(2, "0"); //日
  21. var hour = (time.getHours() + "").padStart(2, "0"); //时
  22. var minutes = (time.getMinutes() + "").padStart(2, "0"); //分
  23. var seconds = (time.getSeconds() + "").padStart(2, "0"); //秒
  24. var weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
  25. this.week = weeks[wk]
  26. this.time = `${year}${month}${date}${hour}${minutes}${seconds}秒`;
  27. }
  28. },
  29. mounted() {
  30. this.getTime()
  31. setInterval(() => {
  32. this.getTime()
  33. }, 1000)
  34. }
  35. }
  36. </script>

(2).Vue获取当前时间的星期一到星期天

  1. <template>
  2. <div>
  3. <h1>星期一{{month.MondayTime}}</h1>
  4. <h1>星期二{{month.TuesdayTime}}</h1>
  5. <h1>星期三{{month.WednesdayTime}}</h1>
  6. <h1>星期四{{month.ThursdayTime}}</h1>
  7. <h1>星期五{{month.FridayTime}}</h1>
  8. <h1>星期六{{month.SaturdayTime}}</h1>
  9. <h1>星期日{{month.SundayTime}}</h1>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data() {
  15. return {
  16. month: {
  17. MondayTime: null,
  18. TuesdayTime: null,
  19. WednesdayTime: null,
  20. ThursdayTime: null,
  21. FridayTime: null,
  22. SaturdayTime: null,
  23. SundayTime: null
  24. }
  25. };
  26. },
  27. mounted() {
  28. this.weekCheckingIn()
  29. },
  30. methods: {
  31. weekCheckingIn() {
  32. var now = new Date();
  33. var nowTime = now.getTime();
  34. var day = now.getDay() || 7; // 不加 || 7.周末会变成下周一
  35. var oneDayTime = 24 * 60 * 60 * 1000;
  36. var MondayTime = nowTime - (day - 1) * oneDayTime; //显示周一
  37. var TuesdayTime = nowTime - (day - 2) * oneDayTime; //显示周二
  38. var WednesdayTime = nowTime - (day - 3) * oneDayTime; //显示周三
  39. var ThursdayTime = nowTime - (day - 4) * oneDayTime; //显示周四
  40. var FridayTime = nowTime - (day - 5) * oneDayTime; //显示周五
  41. var SaturdayTime = nowTime - (day - 6) * oneDayTime; //显示周六
  42. var SundayTime = nowTime + (7 - day) * oneDayTime; //显示周日
  43. //调用方法
  44. this.month.MondayTime = this.formatDate(new Date(MondayTime))
  45. this.month.TuesdayTime = this.formatDate(new Date(TuesdayTime))
  46. this.month.WednesdayTime = this.formatDate(new Date(WednesdayTime))
  47. this.month.ThursdayTime = this.formatDate(new Date(ThursdayTime))
  48. this.month.FridayTime = this.formatDate(new Date(FridayTime))
  49. this.month.SaturdayTime = this.formatDate(new Date(SaturdayTime))
  50. this.month.SundayTime = this.formatDate(new Date(SundayTime))
  51. },
  52. //格式化日期:yyyy-MM-dd
  53. formatDate(date) {
  54. var myyear = date.getFullYear();
  55. var mymonth = date.getMonth() + 1;
  56. var myweekday = date.getDate();
  57. if (mymonth < 10) {
  58. mymonth = "0" + mymonth;
  59. }
  60. if (myweekday < 10) {
  61. myweekday = "0" + myweekday;
  62. }
  63. return (myyear + "-" + mymonth + "-" + myweekday);
  64. }
  65. },
  66. };
  67. </script>

 (3).Vue中实现上一周下一周的切换

  1. <template>
  2. <div class="tabox">
  3. <div class="hand">
  4. <button @click="lastclick" size="mini">上一周</button>
  5. <button @click="presentclick" size="mini">本周</button>
  6. <button @click="nextclick" size="mini">下一周</button>
  7. </div>
  8. <div>
  9. <span>当天星期几:{{ todayDate }}</span>
  10. </div>
  11. <div class="list">
  12. <span v-for="(item, index) in weekDayArr" :key="index">{{
  13. item.adate
  14. }}</span>
  15. </div>
  16. </div>
  17. </template>
  18. <script>
  19. export default {
  20. data() {
  21. return {
  22. currentFirstDate: "",
  23. clen: 7,
  24. todayDate: "",
  25. weekDayArr: [],
  26. };
  27. },
  28. created() {
  29. this.todayDate = this.formatDate(new Date());
  30. this.setDate(new Date());
  31. },
  32. methods: {
  33. // 日期格式处理
  34. formatDate(date) {
  35. var year = date.getFullYear(); //年
  36. var month = (date.getMonth() + 1 + "").padStart(2, "0"); //月
  37. var day = (date.getDate() + "").padStart(2, "0"); //日
  38. var week = "(" + ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"][date.getDay()] + ")";
  39. return `${year}-${month}-${day} ${week}`;
  40. },
  41. addDate(date, n) {
  42. date.setDate(date.getDate() + n);
  43. return date;
  44. },
  45. setDate(date) {
  46. var week = date.getDay() - 1;
  47. date = this.addDate(date, week * -1);
  48. this.currentFirstDate = new Date(date);
  49. for (var i = 0; i < this.clen; i++) {
  50. this.weekDayArr.push({
  51. adate: this.formatDate(i == 0 ? date : this.addDate(date, 1)),
  52. });
  53. }
  54. },
  55. //本周
  56. presentclick() {
  57. this.weekDayArr = [];
  58. this.setDate(new Date());
  59. },
  60. //上一周
  61. lastclick() {
  62. this.weekDayArr = [];
  63. this.setDate(this.addDate(this.currentFirstDate, -7));
  64. },
  65. //下一周
  66. nextclick() {
  67. this.weekDayArr = [];
  68. this.setDate(this.addDate(this.currentFirstDate, 7));
  69. },
  70. },
  71. };
  72. </script>
  73. <style scoped>
  74. .hand {
  75. display: flex;
  76. align-items: center;
  77. justify-content: space-between;
  78. }
  79. .tabox span {
  80. font-size: 20px;
  81. color: #222;
  82. line-height: 40px;
  83. letter-spacing: 2px;
  84. display: block;
  85. font-family: "宋体";
  86. }
  87. </style>

 (4).Vue对时间进行二次复用

1.新建一个time-week.js文件

  1. var time = new Date();
  2. var weekNew = time.getDay()
  3. var year = time.getFullYear(); //年
  4. var month = (time.getMonth() + 1 + "").padStart(2, "0"); //月
  5. var date = (time.getDate() + "").padStart(2, "0"); //日
  6. var hour = (time.getHours() + "").padStart(2, "0"); //时
  7. var minutes = (time.getMinutes() + "").padStart(2, "0"); //分
  8. var seconds = (time.getSeconds() + "").padStart(2, "0"); //秒
  9. var weekList = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
  10. var week = weekList[weekNew]
  11. export default {
  12. year, //年
  13. month, //月
  14. date, //日
  15. hour, //时
  16. minutes, //分
  17. seconds, //秒
  18. week //星期
  19. }

2.在页面中进行引用

  1. <template>
  2. <view>
  3. {{timer.year}}-{{timer.month}}-{{timer.date}}
  4. {{timer.week}}
  5. </view>
  6. </template>
  7. <script>
  8. import dateAndTime from "./time-week.js";
  9. export default {
  10. data() {
  11. return {
  12. timer: {
  13. year: dateAndTime.year, //年
  14. month: dateAndTime.month, //月
  15. date: dateAndTime.date, //日
  16. hour: dateAndTime.hour, //时
  17. minutes: dateAndTime.minutes, //分
  18. seconds: dateAndTime.seconds, //秒
  19. week: dateAndTime.week //星期
  20. }
  21. }
  22. },
  23. mounted() {
  24. console.log(this.timer.year, this.timer.month, this.timer.date, this.timer.hour, this.timer.minutes, this.timer
  25. .seconds, this.timer.week)
  26. }
  27. }
  28. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/96319
推荐阅读
相关标签
  

闽ICP备14008679号