当前位置:首页 > VUE

vue实现筛选列表

2026-02-17 16:15:02VUE

Vue 实现筛选列表的方法

在 Vue 中实现筛选列表可以通过多种方式完成,以下是几种常见的方法:

使用计算属性筛选数据

计算属性是 Vue 中处理数据筛选的理想选择,它会根据依赖的数据自动更新:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用方法进行筛选

如果需要更复杂的筛选逻辑,可以使用方法:

<template>
  <div>
    <input v-model="searchQuery" @input="filterItems">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ],
      filteredItems: []
    }
  },
  methods: {
    filterItems() {
      this.filteredItems = this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  },
  created() {
    this.filterItems()
  }
}
</script>

使用第三方库实现高级筛选

对于更复杂的筛选需求,可以考虑使用 Lodash 等工具库:

import _ from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果', category: '水果' },
        { id: 2, name: '胡萝卜', category: '蔬菜' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return _.filter(this.items, item => {
        return (
          item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
          item.category.toLowerCase().includes(this.searchQuery.toLowerCase())
        )
      })
    }
  }
}

多条件筛选实现

实现多条件筛选可以结合多个输入框和计算属性:

<template>
  <div>
    <input v-model="nameFilter" placeholder="按名称筛选">
    <input v-model="categoryFilter" placeholder="按类别筛选">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.category }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      nameFilter: '',
      categoryFilter: '',
      items: [
        { id: 1, name: '苹果', category: '水果' },
        { id: 2, name: '胡萝卜', category: '蔬菜' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        const nameMatch = item.name.toLowerCase().includes(this.nameFilter.toLowerCase())
        const categoryMatch = item.category.toLowerCase().includes(this.categoryFilter.toLowerCase())
        return nameMatch && categoryMatch
      })
    }
  }
}
</script>

使用 Vuex 管理筛选状态

在大型应用中,可以使用 Vuex 集中管理筛选状态:

vue实现筛选列表

// store.js
export default new Vuex.Store({
  state: {
    searchQuery: '',
    items: [
      { id: 1, name: '苹果' },
      { id: 2, name: '香蕉' }
    ]
  },
  getters: {
    filteredItems: state => {
      return state.items.filter(item =>
        item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
      )
    }
  }
})

// 组件中使用
<template>
  <div>
    <input v-model="$store.state.searchQuery">
    <ul>
      <li v-for="item in $store.getters.filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

以上方法可以根据具体需求选择使用,计算属性方式适合大多数简单场景,而 Vuex 方式更适合状态管理复杂的大型应用。

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

相关文章

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…