当前位置:首页 > VUE

vue实现筛选列表

2026-03-09 04:46:09VUE

实现筛选列表的基本思路

在Vue中实现筛选列表通常需要结合数据绑定、计算属性和方法。通过监听用户输入或选择的变化,动态过滤原始数据列表,展示符合条件的项目。

准备数据源

定义一个数组作为原始数据源,包含需要筛选的列表项。每个列表项可以是对象,包含多个属性用于不同维度的筛选。

data() {
  return {
    items: [
      { id: 1, name: 'Apple', category: 'Fruit', price: 2.5 },
      { id: 2, name: 'Banana', category: 'Fruit', price: 1.2 },
      { id: 3, name: 'Carrot', category: 'Vegetable', price: 0.8 },
      { id: 4, name: 'Milk', category: 'Dairy', price: 3.5 }
    ],
    searchTerm: '',
    selectedCategory: ''
  }
}

创建筛选逻辑

使用计算属性实现筛选逻辑,根据用户输入的条件返回过滤后的列表。计算属性会自动缓存结果,提高性能。

computed: {
  filteredItems() {
    return this.items.filter(item => {
      const matchesSearch = item.name.toLowerCase().includes(this.searchTerm.toLowerCase())
      const matchesCategory = !this.selectedCategory || item.category === this.selectedCategory
      return matchesSearch && matchesCategory
    })
  }
}

添加用户输入界面

在模板中添加输入控件,让用户可以输入搜索词和选择分类。使用v-model实现双向数据绑定。

<div>
  <input type="text" v-model="searchTerm" placeholder="Search items...">

  <select v-model="selectedCategory">
    <option value="">All Categories</option>
    <option v-for="category in uniqueCategories" :value="category">
      {{ category }}
    </option>
  </select>
</div>

显示筛选结果

使用v-for指令循环渲染过滤后的列表项。可以添加条件判断,当没有匹配结果时显示提示信息。

<ul>
  <li v-for="item in filteredItems" :key="item.id">
    {{ item.name }} - {{ item.category }} - ${{ item.price }}
  </li>
  <li v-if="filteredItems.length === 0">No items match your criteria</li>
</ul>

添加分类选项

创建一个计算属性获取所有唯一的分类选项,用于下拉选择框。

computed: {
  uniqueCategories() {
    return [...new Set(this.items.map(item => item.category))]
  }
}

多条件筛选扩展

对于更复杂的筛选需求,可以添加更多筛选条件和逻辑。例如增加价格范围筛选。

data() {
  return {
    minPrice: 0,
    maxPrice: 100
  }
}

computed: {
  filteredItems() {
    return this.items.filter(item => {
      const matchesSearch = item.name.toLowerCase().includes(this.searchTerm.toLowerCase())
      const matchesCategory = !this.selectedCategory || item.category === this.selectedCategory
      const matchesPrice = item.price >= this.minPrice && item.price <= this.maxPrice
      return matchesSearch && matchesCategory && matchesPrice
    })
  }
}

性能优化建议

对于大型列表,可以考虑以下优化措施:

vue实现筛选列表

  • 使用debounce处理搜索输入
  • 实现分页加载
  • 使用虚拟滚动技术
  • 将复杂计算移至Web Worker

标签: 列表vue
分享给朋友:

相关文章

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue实现bootstrap

vue实现bootstrap

Vue 中集成 Bootstrap 的方法 在 Vue 项目中集成 Bootstrap 可以通过以下方式实现,涵盖样式、组件和交互功能。 安装 Bootstrap 依赖 通过 npm 或 yarn…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…