当前位置:首页 > VUE

vue实现筛选列表

2026-03-29 16:18:55VUE

实现筛选列表的基本思路

在Vue中实现筛选列表功能,主要涉及数据绑定、计算属性和事件处理。通过v-model绑定筛选条件,利用计算属性动态过滤列表数据。

基础实现方法

创建Vue实例,定义原始数据列表和筛选条件。使用计算属性返回过滤后的列表。

new Vue({
  el: '#app',
  data: {
    searchText: '',
    items: [
      { id: 1, name: 'Apple', category: 'Fruit' },
      { id: 2, name: 'Carrot', category: 'Vegetable' },
      { id: 3, name: 'Banana', category: 'Fruit' }
    ]
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchText.toLowerCase())
      )
    }
  }
})

模板部分实现

在模板中使用v-model绑定搜索输入框,v-for渲染过滤后的列表。

<div id="app">
  <input v-model="searchText" placeholder="Search...">
  <ul>
    <li v-for="item in filteredItems" :key="item.id">
      {{ item.name }} - {{ item.category }}
    </li>
  </ul>
</div>

多条件筛选实现

扩展筛选功能,支持按多个条件过滤。添加额外的筛选控件和数据属性。

data: {
  searchText: '',
  selectedCategory: '',
  categories: ['Fruit', 'Vegetable'],
  items: [
    // 原始数据
  ]
},
computed: {
  filteredItems() {
    return this.items.filter(item => {
      const nameMatch = item.name.toLowerCase().includes(
        this.searchText.toLowerCase()
      )
      const categoryMatch = !this.selectedCategory || 
        item.category === this.selectedCategory
      return nameMatch && categoryMatch
    })
  }
}

模板中添加分类筛选

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

性能优化建议

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

vue实现筛选列表

  • 使用debounce处理输入事件,减少频繁过滤
  • 添加分页功能,限制每次渲染的条目数量
  • 考虑使用Web Worker进行繁重的计算
  • 对于静态数据,可以预先建立索引

完整示例代码

<div id="app">
  <input v-model="searchText" placeholder="Search by name...">
  <select v-model="selectedCategory">
    <option value="">All Categories</option>
    <option v-for="category in categories" :value="category">
      {{ category }}
    </option>
  </select>

  <ul>
    <li v-for="item in filteredItems" :key="item.id">
      {{ item.name }} ({{ item.category }})
    </li>
  </ul>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    searchText: '',
    selectedCategory: '',
    categories: ['Fruit', 'Vegetable'],
    items: [
      { id: 1, name: 'Apple', category: 'Fruit' },
      { id: 2, name: 'Carrot', category: 'Vegetable' },
      { id: 3, name: 'Banana', category: 'Fruit' },
      { id: 4, name: 'Broccoli', category: 'Vegetable' }
    ]
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        const nameMatch = item.name.toLowerCase().includes(
          this.searchText.toLowerCase()
        )
        const categoryMatch = !this.selectedCategory || 
          item.category === this.selectedCategory
        return nameMatch && categoryMatch
      })
    }
  }
})
</script>

注意事项

  • 确保为列表项设置唯一的key属性
  • 考虑空状态的处理,当没有匹配项时显示友好提示
  • 对于复杂筛选逻辑,可以考虑将过滤函数拆分为单独的方法
  • 在Vue 3中使用组合式API时,可以将筛选逻辑封装为可复用的composable

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

相关文章

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template&…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue 实现loading

vue 实现loading

Vue 实现 Loading 的方法 使用 v-if 和 v-show 控制显示 在 Vue 中可以通过 v-if 或 v-show 控制 loading 组件的显示与隐藏。v-if 会动态创建或销毁…

vue 实现vshow

vue 实现vshow

Vue 实现 v-show 在 Vue 中,v-show 是一个常用的指令,用于根据条件控制元素的显示或隐藏。与 v-if 不同,v-show 不会移除 DOM 元素,而是通过 CSS 的 displ…