Vue3中删除了过滤器filter功能-如何使用computed和methods实现filter功能

使用computed和methods实现filter功能

案例演示 

基础代码

<template>
  <div id="app">
    <ul v-for="(item, index) in arr" :key="index">
      <li>快递公司:{{ item.deliverCompany }}</li>
      <li>运输状态:{{ item.expressState }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      arr: [
        {
          deliverCompany: "快递1",
          expressState: "1",
        },
        {
          deliverCompany: "快递2",
          expressState: "2",
        },
        {
          deliverCompany: "快递3",
          expressState: "3",
        },
        {
          deliverCompany: "快递4",
          expressState: "4",
        },
        {
          deliverCompany: "快递5",
          expressState: "5",
        },
        {
          deliverCompany: "快递6",
          expressState: null,
        },
      ],
    };
  },
};
</script>

filter实现

<template>
  <div id="app">
    <ul v-for="(item, index) in arr" :key="index">
      <li>快递公司:{{ item.deliverCompany }}</li>
      <!-- 使用过滤器语法 -->
      <li>运输状态:{{ item.expressState | showState }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      ......
    };
  },
  // 在组件内定义,然后根据不同的状态返回不同的值内容
  filters: {
    showState(state) {
      switch (state) {
        case "1":
          return "待发货";
          break;
        case "2":
          return "已发货";
          break;
        case "3":
          return "运输中";
          break;
        case "4":
          return "派件中";
          break;
        case "5":
          return "已收货";
          break;
        default:
          return "快递信息丢失";
          break;
      }
    },
  },
};
</script>

computed实现

<template>
  <div id="app">
    <ul v-for="(item, index) in arr" :key="index">
      <li>快递公司:{{ item.deliverCompany }}</li>
      <!-- 使用计算属性 -->
      <li>运输状态:{{ computedText(item.expressState) }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      ......
    };
  },
  computed: {
    computedText() {
      // 计算属性要return一个函数接收参数
      return (state)=>{
        switch (state) {
          case "1":
            return "待发货";
            break;
          case "2":
            return "已发货";
            break;
          case "3":
            return "运输中";
            break;
          case "4":
            return "派件中";
            break;
          case "5":
            return "已收货";
            break;
          default:
            return "快递信息丢失";
            break;
        }
      };
    },
  },
};
</script>

methods实现

<template>
  <div id="app">
    <ul v-for="(item, index) in arr" :key="index">
      <li>快递公司:{{ item.deliverCompany }}</li>
      <!-- 使用方法 -->
      <li>运输状态:{{ methodsText(item.expressState) }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      ......
    };
  },
  methods: {
    methodsText(state) {
      switch (state) {
        case "1":
          return "待发货";
          break;
        case "2":
          return "已发货";
          break;
        case "3":
          return "运输中";
          break;
        case "4":
          return "派件中";
          break;
        case "5":
          return "已收货";
          break;
        default:
          return "快递信息丢失";
          break;
      }
    },
  },
};
</script>

Vue3删去了重复的功能,使用computed和methods也可以实现filter功能

Vue 3,`filter`已被废弃,推荐使用计算属性(computed)或者方法(methods)来替代。计算属性和方法在Vue 3可以实现相同的功能。 1. 使用计算属性(computed): 在Vue 3,可以使用计算属性(computed)来实现过滤功能。计算属性会根据依赖的数据自动更新,类似于过滤器的效果。下面是一个示例: ```html <template> <div> <input v-model="searchText" placeholder="Search"> <ul> <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li> </ul> </div> </template> <script> import { ref, computed } from 'vue'; export default { setup() { const items = ref([ { id: 1, name: 'Apple' }, { id: 2, name: 'Banana' }, { id: 3, name: 'Orange' }, ]); const searchText = ref(''); const filteredItems = computed(() => { return items.value.filter(item => item.name.includes(searchText.value)); }); return { searchText, filteredItems }; } } </script> ``` 在上面的示例,我们使用`computed`创建了一个计算属性`filteredItems`,它会根据`searchText`和`items`的值动态计算出过滤后的结果并返回。 2. 使用方法(methods): 另一种替代方案是使用方法(methods)来实现同样的过滤功能。下面是一个示例: ```html <template> <div> <input v-model="searchText" placeholder="Search"> <ul> <li v-for="item in getFilteredItems" :key="item.id">{{ item.name }}</li> </ul> </div> </template> <script> import { ref } from 'vue'; export default { setup() { const items = ref([ { id: 1, name: 'Apple' }, { id: 2, name: 'Banana' }, { id: 3, name: 'Orange' }, ]); const searchText = ref(''); function filterItems() { return items.value.filter(item => item.name.includes(searchText.value)); } return { searchText, getFilteredItems: filterItems }; } } </script> ``` 在上面的示例,我们使用`methods`创建了一个方法`filterItems`,它会根据`searchText`和`items`的值动态计算出过滤后的结果并返回。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieDYH

谢谢您嘞!我会继续加油地

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值