在 Vue 中过滤列表

Vue 是一款流行的 JavaScript 框架,它提供了很多方便的工具来处理数据和渲染视图。其中一个常见的任务是在 Vue 中过滤列表。本文将介绍如何使用 Vue 实现列表过滤功能,并提供一些实例代码。

列表过滤是指根据特定条件筛选出列表中的某些项,例如,根据关键词搜索、按照日期排序、按照价格范围筛选等。在 Vue 中,我们可以使用计算属性和过滤器来实现列表过滤功能。

计算属性

计算属性是 Vue 中的一个重要特性,它允许我们定义一个基于其他数据计算得出的属性。我们可以在计算属性中使用 JavaScript 代码来实现列表过滤。例如,假设我们有一个包含商品信息的列表,我们想根据价格范围来筛选出符合条件的商品:

<template>
  <div>
    <input v-model="minPrice" type="text" placeholder="最低价格">
    <input v-model="maxPrice" type="text" placeholder="最高价格">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">{{ item.name }} - {{ item.price }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '商品A', price: 100 },
        { id: 2, name: '商品B', price: 200 },
        { id: 3, name: '商品C', price: 300 },
        { id: 4, name: '商品D', price: 400 },
      ],
      minPrice: '',
      maxPrice: '',
    };
  },
  computed: {
    filteredItems() {
      const min = parseInt(this.minPrice);
      const max = parseInt(this.maxPrice);
      if (isNaN(min) && isNaN(max)) {
        return this.items;
      } else if (isNaN(min)) {
        return this.items.filter(item => item.price <= max);
      } else if (isNaN(max)) {
        return this.items.filter(item => item.price >= min);
      } else {
        return this.items.filter(item => item.price >= min && item.price <= max);
      }
    },
  },
};
</script>

在上面的代码中,我们使用了两个输入框来输入最低价格和最高价格,然后在计算属性 filteredItems 中根据这两个值来筛选出符合条件的商品。如果两个输入框都没有输入值,则显示全部商品;如果只输入了最低价格,则只显示价格大于等于最低价格的商品;如果只输入了最高价格,则只显示价格小于等于最高价格的商品;如果两个输入框都输入了值,则只显示价格在最低价格和最高价格之间的商品。

过滤器

过滤器是 Vue 中的另一个重要特性,它允许我们定义一个可以重复使用的文本转换函数。我们可以在过滤器中使用 JavaScript 代码来实现列表过滤。例如,假设我们有一个包含文章列表的页面,我们想根据关键词来搜索文章:

<template>
  <div>
    <input v-model="keyword" type="text" placeholder="搜索关键词">
    <ul>
      <li v-for="item in items" :key="item.id">
        <h2>{{ item.title | highlight(keyword) }}</h2>
        <p>{{ item.content }}</p>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, title: '文章A', content: '这是一篇关于Vue的文章。' },
        { id: 2, title: '文章B', content: '这是一篇关于React的文章。' },
        { id: 3, title: '文章C', content: '这是一篇关于Angular的文章。' },
        { id: 4, title: '文章D', content: '这是一篇关于JavaScript的文章。' },
      ],
      keyword: '',
    };
  },
  filters: {
    highlight(value, keyword) {
      const regex = new RegExp(keyword, 'gi');
      return value.replace(regex, '<span class="highlight">$&</span>');
    },
  },
};
</script>

<style>
.highlight {
  background-color: yellow;
}
</style>

在上面的代码中,我们使用了一个输入框来输入关键词,然后在模板中使用过滤器 highlight 来根据关键词高亮显示文章标题。过滤器接受两个参数,第一个参数是要过滤的值,第二个参数是关键词。我们在过滤器中使用了 JavaScript 的 RegExp 对象来创建一个正则表达式,然后使用 replace 方法来将匹配的关键词用 <span> 标签包裹起来,并添加一个 CSS 类名来设置高亮样式。

结语

以上就是如何在 Vue 中过滤列表的介绍和实例代码。通过使用计算属性和过滤器,我们可以很方便地实现列表过滤功能。在实际开发中,我们可以根据具体需求来选择使用哪种方法来实现列表过滤。