vue过滤器 Vue.filter() filters

 作用:过滤数据

 

    语法:
        全局:
            Vue.filter("过滤器名",(参数一,参数二)=>{});
                参数一:需要过滤的数据
                参数二:传递的数据

 

        局部:
            filters:{
                过滤器名(){

 

                }
            }
    
    使用:{{username|过滤器名()}}


全局过滤器:

1、定义过滤器(npm i moment)

import moment from 'moment'
Vue.filter('format',(value, formatter) => {
  return moment(value).format(formatter)
})

2、使用过滤器

  data() {
    return { time: new Date().getTime() }
  }
    <p>格式化时间:{{time|format('YYYY-MM-DD')}}</p>

 

局部过滤器:

1、定义过滤器

  filters: {
    imgReplace(data, wh) {
      return data.replace(/w\.h/, wh) // 将字符串 "w.h" 替换为 "170.280"
    },
    currency: (value) => `¥${value.toFixed(2)}元`
  }

2、使用过滤器

  data() {
    return {
      imgUrl:
        'http://p0.meituan.net/w.h/movie/2c24eb6a84a92b9ba837967851bec9462844109.jpg',
      price: 100
    }
  }
    <img :src="imgUrl|imgReplace('170.280')" alt="">
    <p>货币:{{price|currency}}</p>

效果:

 

 

使用过滤器做数据优化:

1、mock数据:(src/data/order.js)

复制代码
export default [
  // 1 待付款  2 待发货 3 待收货 4 待评价
  {
    orderId: 1,
    name: '商品1',
    price: 100,
    status: 1
  },
  {
    orderId: 2,
    name: '商品2',
    price: 500,
    status: 2
  },
  {
    orderId: 3,
    name: '商品3',
    price: 700,
    status: 3
  },
  {
    orderId: 4,
    name: '商品4',
    price: 1000,
    status: 4
  }
]
复制代码

2、定义处理数据过滤器和处理样式过滤器(src/filters/order.js)

复制代码
export default {
  setOrderStatus(value) {
    // 1 -> 待付款  2 -> 待发货 3 -> 待收货 4 -> 待评价
    switch (value) {
      case 1:
        return '待付款'
      case 2:
        return '待发货'
      case 3:
        return '待收货'
      case 4:
        return '待评价'
      default:
        return '未获取到状态'
    }
  },
  setStatusStyle(value) {
    switch (value) {
      case '待付款':
        return 'not-pay'
      case '待发货':
        return 'not-send'
      case '待收货':
        return 'not-receive'
      case '待评价':
        return 'not-comment'
      default:
        return ''
    }
  }
}
复制代码

3、使用过滤器

复制代码
<template>
  <div id="app">
    <table border="1">
      <tr v-for="(item, index) in orderData" :key="index">
        <td>{{ item.orderId }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.price }}</td>
        <td :class="item.status | setOrderStatus | setStatusStyle">
          {{ item.status | setOrderStatus }}
        </td>
      </tr>
    </table>
  </div>
</template>
<script>
import orderData from './data/order'
import orderFilter from './filters/order'
export default {
  data() {
    return { orderData }
  },
  filters: orderFilter
}
</script>
<style lang="less" scoped>
table {
  width: 800px;
  margin: 50px auto;
  border-collapse: collapse;
  text-align: center;
}
.not-pay {
  color: red;
}
.not-send {
  color: blue;
}
.not-receive {
  color: orange;
}
.not-comment {
  color: green;
}
</style>
复制代码

 

 

过滤器的作用和computed类似,都是做数据优化的,数据优化也可以在methods中获取到数据时进行优化处理,具体使用哪一种方法看情况。

 

posted @   吴小明-  阅读(540)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示