Vue_过滤器

概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;

https://cn.vuejs.org/v2/guide/filters.html#ad

  • 管道符:| 第一个命令的输出作为第二个命令的输入
  • 全局:Vue.filter(name, function(data, arg1, arg2 …))
  • 局部:filters: {}
  • 参数解释:
    • data:被输入的值,管道符|前面的值
    • argN:作为函数参数
  • 如果不需要传入参数,则可以省略括号

1.1 全局过滤器

过滤器可以用在两个地方:双花括号插值和 v-bind 表达式

  1. <!-- 在双花括号中 -->
  2. {{ message | capitalize }}
  3. <!-- 在 `v-bind` 中 -->
  4. <div v-bind:id="rawId | formatId"></div>

全局过滤器的定义

  1. // 过滤器的定义语法
  2. Vue.filter('过滤器的名称', function(){})
  3. // 过滤器中的 function ,第一个参数,已经被规定死了,永远都是 过滤器 管道符前面 传递过来的数据
  4. Vue.filter('过滤器的名称', (data)=>{
  5. return data + '123';
  6. })

过滤器的使用示例

  1. <div id="app">
  2. <!-- 格式化为年月日 -->
  3. <p>{{ new Date() | dateFormat() }}</p>
  4. <!-- 给金额前加上¥货币符号 -->
  5. <p>{{ 399 | moneyFormat }}</p>
  6. <p>{{ 399 | moneyFormat('$')}}</p>
  7. <!-- 敏感词过滤 将其中单纯替换为** -->
  8. <p>{{ '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人!' | msgFormat('--') }}</p>
  9. </div>

Vue.filter定义全局过滤器

  1. // 时间过滤器
  2. Vue.filter('dateFormat', (data) => {
  3. const date = new Date(data)
  4. // 获取年月日
  5. const year = date.getFullYear()
  6. const month = date.getMonth()
  7. const day = date.getDate()
  8. return `${year} ${month} ${day} 日`
  9. });
  10. // 金额过滤器
  11. Vue.filter('moneyFormat',(data,sign="¥")=>{
  12. return sign+data;
  13. });
  14. // 过滤单纯敏感词
  15. Vue.filter('msgFormat', function(data, arg = "***") {
  16. return data.replace(/单纯/g, arg);
  17. });

1.2 私有过滤器

  • 私有过滤器,若全局过滤器中有同名过滤器,则优先调用私有过滤器

HTML元素:

  1. <div id="app">
  2. <p>{{ new Date() | dataFormat}}</p> <!-- 2021-05-05 18:26:25 -->
  3. <p>{{ new Date() | dataFormat('yyyy-mm-dd')}}</p> <!-- 2021-05-05 -->
  4. </div>

私有过滤器 filters 定义方式:

  1. // 全局过滤器
  2. Vue.filter('dateFormat', (data) => {
  3. const date = new Date(data)
  4. // 获取年月日
  5. const year = date.getFullYear()
  6. const month = date.getMonth()
  7. const day = date.getDate()
  8. return `${year} ${month} ${day} 日~~`
  9. });
  10. var vm = new Vue({
  11. el: '#app',
  12. data: {
  13. },
  14. methods: {
  15. },
  16. filters: { // 私有局部过滤器,只能在 当前 VM 对象所控制的 View 区域进行使用
  17. dataFormat(input, pattern = "") { // 在参数列表中 通过 pattern="" 来指定形参默认值,防止报错
  18. var dt = new Date(input);
  19. // 获取年月日
  20. var y = dt.getFullYear();
  21. var m = (dt.getMonth() + 1).toString().padStart(2, '0');
  22. var d = dt.getDate().toString().padStart(2, '0');
  23. // 如果 传递进来的字符串类型,转为小写之后,等于 yyyy-mm-dd,那么就返回 年-月-日
  24. // 否则,就返回 年-月-日 时:分:秒
  25. if (pattern.toLowerCase() === 'yyyy-mm-dd') {
  26. return `${y}-${m}-${d}`;
  27. } else {
  28. // 获取时分秒
  29. var hh = dt.getHours().toString().padStart(2, '0');
  30. var mm = dt.getMinutes().toString().padStart(2, '0');
  31. var ss = dt.getSeconds().toString().padStart(2, '0');
  32. return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
  33. }
  34. }
  35. }
  36. });
  37. // 使用ES6中的字符串新方法 String.prototype.padStart(maxLength, fillString='') 或 String.prototype.padEnd(maxLength, fillString='')来填充字符串长度;

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

1.3 串联过滤器

过滤器可以串联多个,前一个过滤器的返回值作为后一个的参数

给定一个状态 status ,值为 1、2、3
1:待付款 2:待发货 3:待收货
分别设置:红色、灰色、绿色

  1. <style>
  2. .no-pay {
  3. background-color: #ccc;
  4. padding: 10px;
  5. }
  6. .no-shipments {
  7. background-color: orange;
  8. padding: 10px;
  9. }
  10. .yes-shipments {
  11. background-color: green;
  12. padding: 10px;
  13. }
  14. .take-delivery {
  15. background-color: red;
  16. padding: 10px;
  17. }
  18. </style>
  19. <div id="app">
  20. <span v-bind:class="1 | getStatus | setStatusColor">{{ 1 | getStatus }}</span>
  21. <span v-bind:class="2 | getStatus | setStatusColor">{{ 2 | getStatus }}</span>
  22. <span v-bind:class="3 | getStatus | setStatusColor">{{ 3 | getStatus }}</span>
  23. <span v-bind:class="4 | getStatus | setStatusColor">{{ 4 | getStatus }}</span>
  24. </div>

filters定义局部过滤器

  1. filters: {
  2. // 判断是什么状态
  3. getStatus(data) {
  4. switch(data) {
  5. case 1:
  6. return '待付款'
  7. case 2:
  8. return '待发货'
  9. case 3:
  10. return '已发货'
  11. case 4:
  12. return '待收货'
  13. }
  14. },
  15. // 设置状态文字颜色
  16. setStatusColor(data) {
  17. switch(data) {
  18. case '待付款':
  19. return 'no-pay'
  20. case '待发货':
  21. return 'no-shipments'
  22. case '已发货':
  23. return 'yes-shipments'
  24. case '待收货':
  25. return 'take-delivery'
  26. }
  27. }
  28. }

更多相关文章

  1. SkyWalking结合Logback获取全局唯一标识 trace-id 记录到日志中
  2. Servlet过滤器使用实例(防止用户恶意登录)
  3. npm 卸载模块
  4. 深入浅出ES6的Symbol类型
  5. vue与react的简单比较(全局状态管理)
  6. uni-app,Vue 使用 filter 过滤或者替换 v-for 的值
  7. 面板数据计量方法全局脉络和程序使用指南篇
  8. Phoenix全局索引设计实践
  9. 函数-对象、嵌套、名称空间与作用域

随机推荐

  1. Android 5将在第二季度发布
  2. Android TTS 实战一:认识 TTS
  3. 你的Android,我的Android
  4. android logo、android开机动画改变详解
  5. android 权限注解库
  6. MaterialRangeSlider双向拖动seekbar
  7. Android日常整理(一)---android返回键、Fra
  8. android中的handler的作用
  9. 键盘弹出以后Activity的布局方式
  10. Android 小项目之--SQLite 使用法门 (附源