当前位置:首页 > VUE

vue实现自动筛选

2026-01-19 14:26:33VUE

自动筛选实现方法

在Vue中实现自动筛选功能,可以通过计算属性、v-model指令和数组过滤方法结合完成。以下是具体实现方式:

基础实现

<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" placeholder="搜索名称或描述..." />
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.description }}
      </li>
    </ul>
  </div>
</template>

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

高级筛选功能

使用debounce优化性能

<script>
import { debounce } from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: [...],
      filteredItems: []
    }
  },
  watch: {
    searchQuery: debounce(function(newVal) {
      this.filterItems(newVal)
    }, 300)
  },
  methods: {
    filterItems(query) {
      const q = query.toLowerCase()
      this.filteredItems = this.items.filter(item =>
        item.name.toLowerCase().includes(q)
      )
    }
  }
}
</script>

结合Vuex实现

// store.js
const store = new Vuex.Store({
  state: {
    items: [...],
    searchQuery: ''
  },
  getters: {
    filteredItems: state => {
      return state.items.filter(item =>
        item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
      )
    }
  }
})

// 组件中使用
computed: {
  ...mapGetters(['filteredItems']),
  searchQuery: {
    get() {
      return this.$store.state.searchQuery
    },
    set(value) {
      this.$store.commit('UPDATE_SEARCH_QUERY', value)
    }
  }
}

筛选组件封装

可复用筛选组件

vue实现自动筛选

<template>
  <div class="filter-container">
    <slot name="input" :query="query" :updateQuery="updateQuery">
      <input 
        :value="query" 
        @input="updateQuery($event.target.value)" 
        placeholder="搜索..."
      />
    </slot>
    <slot name="results" :filteredItems="filteredItems">
      <ul>
        <li v-for="item in filteredItems" :key="getKey(item)">
          {{ item }}
        </li>
      </ul>
    </slot>
  </div>
</template>

<script>
export default {
  props: {
    items: {
      type: Array,
      required: true
    },
    filterFn: {
      type: Function,
      default: (item, query) => 
        item.toString().toLowerCase().includes(query.toLowerCase())
    },
    getKey: {
      type: Function,
      default: (item, index) => index
    }
  },
  data() {
    return {
      query: ''
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        this.filterFn(item, this.query)
      )
    }
  },
  methods: {
    updateQuery(query) {
      this.query = query
    }
  }
}
</script>

这些方法涵盖了从基础到高级的自动筛选实现,可以根据项目需求选择合适的方案。组件化封装使得筛选功能可以在不同场景下复用,而Vuex集成则适合大型应用的状态管理需求。

标签: vue
分享给朋友:

相关文章

vue双向实现

vue双向实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。 数据…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDia…

vue实现帖子

vue实现帖子

Vue 实现帖子功能 使用 Vue 实现帖子功能需要结合前端框架和后端数据交互,以下是实现的关键步骤和代码示例。 帖子列表展示 创建帖子列表组件,使用 v-for 渲染帖子数据,通过 axios 获…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…